C # mongodb - como atualizar elementos de matriz aninhados
Eu tenho a seguinte estrutura JSON que representa um item
{
Id: "a",
Array1: [{
Id: "b",
Array2: [{
Id: "c",
Array3: [
{...}
]
}]
}]
}
Eu preciso ser capaz de substituir o elemento da matriz emArray2
com um novo item ou para substituir apenasArray3
com uma nova matriz.
Aqui está o meu código para substituir o item da matriz emArray2
:
await Collection.UpdateOneAsync(
item => item.Id.Equals("a") &&
item.Array1.Any(a => a.Id.Equals("b")) &&
item.Array1[-1].Array2.Any(b => b.Id.Equals("c")),
Builders<Item>.Update.Set(s => s.Array1[-1].Array2[-1], newArray2Item)
);
Ao executar este código, estou recebendo este erro:
"A write operation resulted in an error.
Too many positional (i.e. 'Aqui está o meu código para substituirArray3
dentroArray2
:
await Collection.UpdateOneAsync(
item => item.Id.Equals("a") &&
item.Array1.Any(a => a.Id.Equals("b")) &&
item.Array1[-1].Array2.Any(b => b.Id.Equals("c")),
Builders<Item>.Update.Set(s => s.Array1[-1].Array2[-1].Array3, newArray3)
);
E este é o erro:
"A write operation resulted in an error.
Too many positional (i.e. 'Estou usando o driver C # MongoDB versão 2.5.0 e MongoDB versão 3.6.1
Encontrei este ingresso para o JiraOperador posicional que combina matrizes aninhadas diz que o problema foi corrigido e eles sugeriram esta sintaxe para a atualização
Update all matching documents in nested array:
db.coll.update({}, {$set: {“a.$[i].c.$[j].d”: 2}}, {arrayFilters: [{“i.b”: 0}, {“j.d”: 0}]})
Input: {a: [{b: 0, c: [{d: 0}, {d: 1}]}, {b: 1, c: [{d: 0}, {d: 1}]}]}
Output: {a: [{b: 0, c: [{d: 2}, {d: 1}]}, {b: 1, c: [{d: 0}, {d: 1}]}]}
Então eu converti para meus elementos:
db.getCollection('Items').update(
{"Id": "a"},
{$set: {"Array1.$[i].Array2.$[j].Array3": [newArray3]}},
{arrayFilters:
[
{"i.Id": "b"},
{"j.Id": "c"}
]}
)
E recebi este erro:
cannot use the part (Array1 of Array.$[i].Array2.$[j].Array3) to traverse the element
Alguma idéia de como resolver esse erro?
) elements found in path 'Array1.$.Array2.Aqui está o meu código para substituirArray3
dentroArray2
:
await Collection.UpdateOneAsync(
item => item.Id.Equals("a") &&
item.Array1.Any(a => a.Id.Equals("b")) &&
item.Array1[-1].Array2.Any(b => b.Id.Equals("c")),
Builders<Item>.Update.Set(s => s.Array1[-1].Array2[-1].Array3, newArray3)
);
E este é o erro:
"A write operation resulted in an error.
Too many positional (i.e. '$') elements found in path 'Array1.$.Array2.$.Array3'"
Estou usando o driver C # MongoDB versão 2.5.0 e MongoDB versão 3.6.1
Encontrei este ingresso para o JiraOperador posicional que combina matrizes aninhadas diz que o problema foi corrigido e eles sugeriram esta sintaxe para a atualização
Update all matching documents in nested array:
db.coll.update({}, {$set: {“a.$[i].c.$[j].d”: 2}}, {arrayFilters: [{“i.b”: 0}, {“j.d”: 0}]})
Input: {a: [{b: 0, c: [{d: 0}, {d: 1}]}, {b: 1, c: [{d: 0}, {d: 1}]}]}
Output: {a: [{b: 0, c: [{d: 2}, {d: 1}]}, {b: 1, c: [{d: 0}, {d: 1}]}]}
Então eu converti para meus elementos:
db.getCollection('Items').update(
{"Id": "a"},
{$set: {"Array1.$[i].Array2.$[j].Array3": [newArray3]}},
{arrayFilters:
[
{"i.Id": "b"},
{"j.Id": "c"}
]}
)
E recebi este erro:
cannot use the part (Array1 of Array.$[i].Array2.$[j].Array3) to traverse the element
Alguma idéia de como resolver esse erro?
"
Aqui está o meu código para substituirArray3
dentroArray2
:
await Collection.UpdateOneAsync(
item => item.Id.Equals("a") &&
item.Array1.Any(a => a.Id.Equals("b")) &&
item.Array1[-1].Array2.Any(b => b.Id.Equals("c")),
Builders<Item>.Update.Set(s => s.Array1[-1].Array2[-1].Array3, newArray3)
);
E este é o erro:
"A write operation resulted in an error.
Too many positional (i.e. '$') elements found in path 'Array1.$.Array2.$.Array3'"
Estou usando o driver C # MongoDB versão 2.5.0 e MongoDB versão 3.6.1
Encontrei este ingresso para o JiraOperador posicional que combina matrizes aninhadas diz que o problema foi corrigido e eles sugeriram esta sintaxe para a atualização
Update all matching documents in nested array:
db.coll.update({}, {$set: {“a.$[i].c.$[j].d”: 2}}, {arrayFilters: [{“i.b”: 0}, {“j.d”: 0}]})
Input: {a: [{b: 0, c: [{d: 0}, {d: 1}]}, {b: 1, c: [{d: 0}, {d: 1}]}]}
Output: {a: [{b: 0, c: [{d: 2}, {d: 1}]}, {b: 1, c: [{d: 0}, {d: 1}]}]}
Então eu converti para meus elementos:
db.getCollection('Items').update(
{"Id": "a"},
{$set: {"Array1.$[i].Array2.$[j].Array3": [newArray3]}},
{arrayFilters:
[
{"i.Id": "b"},
{"j.Id": "c"}
]}
)
E recebi este erro:
cannot use the part (Array1 of Array.$[i].Array2.$[j].Array3) to traverse the element
Alguma idéia de como resolver esse erro?
) elements found in path 'Array1.$.Array2.$.Array3'"
Estou usando o driver C # MongoDB versão 2.5.0 e MongoDB versão 3.6.1
Encontrei este ingresso para o JiraOperador posicional que combina matrizes aninhadas diz que o problema foi corrigido e eles sugeriram esta sintaxe para a atualização
Update all matching documents in nested array:
db.coll.update({}, {$set: {“a.$[i].c.$[j].d”: 2}}, {arrayFilters: [{“i.b”: 0}, {“j.d”: 0}]})
Input: {a: [{b: 0, c: [{d: 0}, {d: 1}]}, {b: 1, c: [{d: 0}, {d: 1}]}]}
Output: {a: [{b: 0, c: [{d: 2}, {d: 1}]}, {b: 1, c: [{d: 0}, {d: 1}]}]}
Então eu converti para meus elementos:
db.getCollection('Items').update(
{"Id": "a"},
{$set: {"Array1.$[i].Array2.$[j].Array3": [newArray3]}},
{arrayFilters:
[
{"i.Id": "b"},
{"j.Id": "c"}
]}
)
E recebi este erro:
cannot use the part (Array1 of Array.$[i].Array2.$[j].Array3) to traverse the element
Alguma idéia de como resolver esse erro?
) elements found in path 'Array1.$.Array2.Aqui está o meu código para substituirArray3
dentroArray2
:
await Collection.UpdateOneAsync(
item => item.Id.Equals("a") &&
item.Array1.Any(a => a.Id.Equals("b")) &&
item.Array1[-1].Array2.Any(b => b.Id.Equals("c")),
Builders<Item>.Update.Set(s => s.Array1[-1].Array2[-1].Array3, newArray3)
);
E este é o erro:
"A write operation resulted in an error.
Too many positional (i.e. '$') elements found in path 'Array1.$.Array2.$.Array3'"
Estou usando o driver C # MongoDB versão 2.5.0 e MongoDB versão 3.6.1
Encontrei este ingresso para o JiraOperador posicional que combina matrizes aninhadas diz que o problema foi corrigido e eles sugeriram esta sintaxe para a atualização
Update all matching documents in nested array:
db.coll.update({}, {$set: {“a.$[i].c.$[j].d”: 2}}, {arrayFilters: [{“i.b”: 0}, {“j.d”: 0}]})
Input: {a: [{b: 0, c: [{d: 0}, {d: 1}]}, {b: 1, c: [{d: 0}, {d: 1}]}]}
Output: {a: [{b: 0, c: [{d: 2}, {d: 1}]}, {b: 1, c: [{d: 0}, {d: 1}]}]}
Então eu converti para meus elementos:
db.getCollection('Items').update(
{"Id": "a"},
{$set: {"Array1.$[i].Array2.$[j].Array3": [newArray3]}},
{arrayFilters:
[
{"i.Id": "b"},
{"j.Id": "c"}
]}
)
E recebi este erro:
cannot use the part (Array1 of Array.$[i].Array2.$[j].Array3) to traverse the element
Alguma idéia de como resolver esse erro?
"Aqui está o meu código para substituirArray3
dentroArray2
:
await Collection.UpdateOneAsync(
item => item.Id.Equals("a") &&
item.Array1.Any(a => a.Id.Equals("b")) &&
item.Array1[-1].Array2.Any(b => b.Id.Equals("c")),
Builders<Item>.Update.Set(s => s.Array1[-1].Array2[-1].Array3, newArray3)
);
E este é o erro:
"A write operation resulted in an error.
Too many positional (i.e. '$') elements found in path 'Array1.$.Array2.$.Array3'"
Estou usando o driver C # MongoDB versão 2.5.0 e MongoDB versão 3.6.1
Encontrei este ingresso para o JiraOperador posicional que combina matrizes aninhadas diz que o problema foi corrigido e eles sugeriram esta sintaxe para a atualização
Update all matching documents in nested array:
db.coll.update({}, {$set: {“a.$[i].c.$[j].d”: 2}}, {arrayFilters: [{“i.b”: 0}, {“j.d”: 0}]})
Input: {a: [{b: 0, c: [{d: 0}, {d: 1}]}, {b: 1, c: [{d: 0}, {d: 1}]}]}
Output: {a: [{b: 0, c: [{d: 2}, {d: 1}]}, {b: 1, c: [{d: 0}, {d: 1}]}]}
Então eu converti para meus elementos:
db.getCollection('Items').update(
{"Id": "a"},
{$set: {"Array1.$[i].Array2.$[j].Array3": [newArray3]}},
{arrayFilters:
[
{"i.Id": "b"},
{"j.Id": "c"}
]}
)
E recebi este erro:
cannot use the part (Array1 of Array.$[i].Array2.$[j].Array3) to traverse the element
Alguma idéia de como resolver esse erro?