2013-07-25 3 views
1

Цель запроса ниже - вытащить элементы из массива locs, где x = 2 и y = 9. Однако элементы с этими значениями остаются в массиве после этого запроса.MongoDb: запрос не вытягивает элемент из массива - почему?

db.myCollection.update(
     { }, //All records 
     { $pull: { 'locs' : { $elemMatch : {'x' : 2 , 'y' : 9 } } } } 
) 

Может ли кто-нибудь сказать мне, почему он не работает?

Edit: Пример документа:

{ 
    "_id" : ObjectId("55555555555"), 
    "locs" : [{ 
     "x" : 2, 
     "y" : 9 
    }], 
    "v" : 99 
} 
+0

Не могли бы вы также добавить примерный документ? – Derick

ответ

3

В общем, $pull не работает, как это. Он удаляет «значение из массива» (http://docs.mongodb.org/manual/reference/operator/pull/). Здесь вы не можете использовать $elemMatch, но вам тоже этого не нужно.

Так что если у вас есть документ, который выглядит следующим образом:

{ 
    'title': 'example', 
    'locs': [ 
     { x: 2, y: 12 }, 
     { x: 7, y: 9 }, 
     { x: 2, y: 9 }, 
    ] 
} 

Последующие должен удалить свой х: 2/у: 9 значения пара:

db.so.update(
    {}, 
    { $pull: { 'locs' : { 'x' : 2 , 'y' : 9 } } } 
); 

который затем:

{ 
    'title': 'example', 
    'locs': [ 
     { x: 2, y: 12 }, 
     { x: 7, y: 9 }, 
    ] 
} 
+0

А я вижу, спасибо за разъяснение Дерика. Я думаю, мне нужно прочитать несколько моментов, включая цель elemMatch. – UpTheCreek

+0

Я думаю, вы прекрасно понимаете '' $ elemMatch'', просто $ pull просто хочет значений, а не выражений/запросов. – Derick

2

Я считаю, что вам не нужно использовать $elemMatch. Попробуйте со следующим, он должен работать:

db.myCollection.update({}, {$pull: {'locs' : {'x' : 2 , 'y' : 9}}}) 

EDIT: или @ ответ Дерик, который является гораздо лучше, чем у меня.

Смежные вопросы