$ addToSet в MongoDb с вложенными позиционными операторами - PullRequest
0 голосов
/ 15 февраля 2012

Я хочу добавить значение в массив, который находится внутри другого массива.Мой документ выглядит так:

{categories:[{categoryName:"a category", items:[{itemName:"an item", arrayOfValues:[1]}]}]}

Я хотел бы использовать $ addToSet для arrayValues.Для этого я делаю обновление с запросом

table.update({"categories.items.itemName" : "anItem"}, {$addToSet: "categories.$.items.$.arrayOfValues":"10"})

, но получаю ошибку: не могу добавить массив, используя имя строкового поля [$]

Что я делаю неправильно?Можно ли обновить с помощью вложенных массивов?

Спасибо

1 Ответ

3 голосов
/ 15 февраля 2012

Массивы внутри массивов сейчас считаются плохим дизайном mongodb (главным образом потому, что вы не можете эффективно ими управлять, используя $addToSet и друзей). И вы сделали еще один шаг вперед и создали массивы внутри массивов внутри массивов!

Я понимаю, что бессмысленная природа MongoDB может вызвать ощущение, что вы можете выбросить в нее документы любой структуры и обработать их позже. К сожалению, это не реальность. Вы должны знать, что вы делаете, какие функции и ограничения есть. В этом случае вы не можете использовать позиционный оператор для перемещения элемента во вложенный массив .

...