$addToSet в MongoDb с вложенными позиционными операторами
Я хочу добавить значение в массив, который находится внутри другого массива. Мой документ похож на:
{categories:[{categoryName:"a category", items:[{itemName:"an item", arrayOfValues:[1]}]}]}
Я хотел бы использовать $addToSet для arrayValues. Для этого я делаю обновление с запросом
table.update({"categories.items.itemName" : "anItem"}, {$addToSet: "categories.$.items.$.arrayOfValues":"10"})
но я получаю ошибку: не могу добавить массив, используя имя строкового поля [$]
Что я делаю неправильно? Можно ли обновить с помощью вложенных массивов?
Спасибо
1 ответ
Массивы внутри массивов сейчас считаются плохим дизайном mongod b (главным образом потому, что вы не можете эффективно ими управлять, используя $addToSet
и друзья). И вы сделали еще один шаг вперед и создали массивы внутри массивов внутри массивов!
Я понимаю, что бессмысленная природа MongoDB может вызвать ощущение, что вы можете бросить в нее документы любой структуры и обработать их позже. К сожалению, это не реальность. Вы должны знать, что вы делаете, какие функции и ограничения есть. В этом случае вы не можете использовать позиционный оператор для перемещения элемента во вложенный массив.