Im ищет способ в MongoDB найти точный документ, что означает, что я не хочу сопоставлять документ с другими полями, чем те, которые ожидаются.mongodb найти точный документ
Это то, что я могу сделать на поддокументах
> db.test.insert({a:{b:1,c:2}});
> db.test.insert({a:{b:1}});
> db.test.find({'a.b':1}); // non exact match
{a:{b:1,c:2}}
{a:{b:1}}
> db.test.find({'a':{'b':1}}); // exact match
{a:{b:1}}
я хотел бы сделать то же самое на основном документе (не поддокумент). Но
> db.test.insert({b:1,c:2});
> db.test.insert({b:1});
> db.test.find({'b':1}); // non exact match
{a:{b:1,c:2}}
{a:{b:1}}
> db.test.find({'.':{'b':1}}); // does not work :(
> db.test.find({'b':1, 'c':null}); // works, but how I am supposed to know that 'c' could exists ???
{a:{b:1}}
Конечная цель состоит в том, чтобы сделать это с помощью $pull
массивов
> db.test.insert({a:[{b:1,c:2},{b:1,d:3},{b:1,c:2},{b:1,c:2,d:3}]});
> db.test.update({}, {$pull:{'a':{b:1,c:2}}});
> db.test.find();
{a:[{b:1,d:3}]} // NOOOO :'(
Кто-нибудь представление об этом?
редактировать:
Вот некоторые точности по точному/частичному совпадению я нашел на массивах:
- элемента массива точного совпадения:
db.test.find({'a':{b:1,c:2}});
- элемента массива частичного соответствие: пункт
db.test.find({'a':{$elemMatch:{b:1,c:2}}});
- массива удаление частичное совпадение:
db.test.update({}, {$pull:{'a':{b:1,c:2}}})
- массив item удаление точное совпадение:
db.test.update({}, {$pullAll:{'a':[{b:1,c:2}]}})
(благодаря JohnnyHK)
Не могли бы вы переименовать этот вопрос «MongoDB удалить документ из массива, который является точным совпадением "или что-то в этом роде? Я искал ответ на ваш первоначальный вопрос и был разочарован тем, что фактический вопрос касался массивов. Спасибо! FYI людям, которые приходят сюда, ища ответы на начальный вопрос: http://stackoverflow.com/questions/27993275/how-to-exact-match-entire-document –