, но он ничего не пишет ... Я не смог найти ничего похожего

я есть следующая структура JSON, которая представляет элемент

{
    Id: "a",
    Array1: [{
        Id: "b",
        Array2: [{
            Id: "c",
            Array3: [
                {...}
            ]
        }]
    }]
}

Мне нужно иметь возможность заменить элемент массива вArray2 с новым предметом или заменить простоArray3 с новым массивом.

Вот мой код для замены элемента массива вArray2:

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)
);

При выполнении этого кода я получаю эту ошибку:

"A write operation resulted in an error.
 Too many positional (i.e. '

Вот мой код для заменыArray3 вArray2:

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)
    );

И это ошибка:

"A write operation resulted in an error.
 Too many positional (i.e. '

Я использую драйвер C # MongoDB версии 2.5.0 и MongoDB версии 3.6.1

Я нашел этот билет ДжираОператор позиционирования, сопоставляющий вложенные массивы что говорит, что проблема была исправлена, и они предложили этот синтаксис для обновления

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}]}]}

Поэтому я преобразовал его в свои элементы:

db.getCollection('Items').update(
{"Id": "a"},
{$set: {"Array1.$[i].Array2.$[j].Array3": [newArray3]}}, 
{arrayFilters: 
    [
        {"i.Id": "b"}, 
        {"j.Id": "c"}
    ]}
)

И получил эту ошибку:

cannot use the part (Array1 of Array.$[i].Array2.$[j].Array3) to traverse the element

Есть идеи, как решить эту ошибку?

) elements found in path 'Array1.$.Array2.

Вот мой код для заменыArray3 вArray2:

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)
    );

И это ошибка:

"A write operation resulted in an error.
 Too many positional (i.e. '$') elements found in path 'Array1.$.Array2.$.Array3'"

Я использую драйвер C # MongoDB версии 2.5.0 и MongoDB версии 3.6.1

Я нашел этот билет ДжираОператор позиционирования, сопоставляющий вложенные массивы что говорит, что проблема была исправлена, и они предложили этот синтаксис для обновления

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}]}]}

Поэтому я преобразовал его в свои элементы:

db.getCollection('Items').update(
{"Id": "a"},
{$set: {"Array1.$[i].Array2.$[j].Array3": [newArray3]}}, 
{arrayFilters: 
    [
        {"i.Id": "b"}, 
        {"j.Id": "c"}
    ]}
)

И получил эту ошибку:

cannot use the part (Array1 of Array.$[i].Array2.$[j].Array3) to traverse the element

Есть идеи, как решить эту ошибку?

"

Вот мой код для заменыArray3 вArray2:

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)
    );

И это ошибка:

"A write operation resulted in an error.
 Too many positional (i.e. '$') elements found in path 'Array1.$.Array2.$.Array3'"

Я использую драйвер C # MongoDB версии 2.5.0 и MongoDB версии 3.6.1

Я нашел этот билет ДжираОператор позиционирования, сопоставляющий вложенные массивы что говорит, что проблема была исправлена, и они предложили этот синтаксис для обновления

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}]}]}

Поэтому я преобразовал его в свои элементы:

db.getCollection('Items').update(
{"Id": "a"},
{$set: {"Array1.$[i].Array2.$[j].Array3": [newArray3]}}, 
{arrayFilters: 
    [
        {"i.Id": "b"}, 
        {"j.Id": "c"}
    ]}
)

И получил эту ошибку:

cannot use the part (Array1 of Array.$[i].Array2.$[j].Array3) to traverse the element

Есть идеи, как решить эту ошибку?

) elements found in path 'Array1.$.Array2.$.Array3'"

Я использую драйвер C # MongoDB версии 2.5.0 и MongoDB версии 3.6.1

Я нашел этот билет ДжираОператор позиционирования, сопоставляющий вложенные массивы что говорит, что проблема была исправлена, и они предложили этот синтаксис для обновления

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}]}]}

Поэтому я преобразовал его в свои элементы:

db.getCollection('Items').update(
{"Id": "a"},
{$set: {"Array1.$[i].Array2.$[j].Array3": [newArray3]}}, 
{arrayFilters: 
    [
        {"i.Id": "b"}, 
        {"j.Id": "c"}
    ]}
)

И получил эту ошибку:

cannot use the part (Array1 of Array.$[i].Array2.$[j].Array3) to traverse the element

Есть идеи, как решить эту ошибку?

) elements found in path 'Array1.$.Array2.

Вот мой код для заменыArray3 вArray2:

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)
    );

И это ошибка:

"A write operation resulted in an error.
 Too many positional (i.e. '$') elements found in path 'Array1.$.Array2.$.Array3'"

Я использую драйвер C # MongoDB версии 2.5.0 и MongoDB версии 3.6.1

Я нашел этот билет ДжираОператор позиционирования, сопоставляющий вложенные массивы что говорит, что проблема была исправлена, и они предложили этот синтаксис для обновления

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}]}]}

Поэтому я преобразовал его в свои элементы:

db.getCollection('Items').update(
{"Id": "a"},
{$set: {"Array1.$[i].Array2.$[j].Array3": [newArray3]}}, 
{arrayFilters: 
    [
        {"i.Id": "b"}, 
        {"j.Id": "c"}
    ]}
)

И получил эту ошибку:

cannot use the part (Array1 of Array.$[i].Array2.$[j].Array3) to traverse the element

Есть идеи, как решить эту ошибку?

"

Вот мой код для заменыArray3 вArray2:

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)
    );

И это ошибка:

"A write operation resulted in an error.
 Too many positional (i.e. '$') elements found in path 'Array1.$.Array2.$.Array3'"

Я использую драйвер C # MongoDB версии 2.5.0 и MongoDB версии 3.6.1

Я нашел этот билет ДжираОператор позиционирования, сопоставляющий вложенные массивы что говорит, что проблема была исправлена, и они предложили этот синтаксис для обновления

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}]}]}

Поэтому я преобразовал его в свои элементы:

db.getCollection('Items').update(
{"Id": "a"},
{$set: {"Array1.$[i].Array2.$[j].Array3": [newArray3]}}, 
{arrayFilters: 
    [
        {"i.Id": "b"}, 
        {"j.Id": "c"}
    ]}
)

И получил эту ошибку:

cannot use the part (Array1 of Array.$[i].Array2.$[j].Array3) to traverse the element

Есть идеи, как решить эту ошибку?

Ответы на вопрос(0)

Ваш ответ на вопрос