2014-07-30 2 views
0

Я пытаюсь выяснить, как я могу искать все документы, которые имеют ту же комбинацию «тегов», что и следующий документ.mongodb find или совокупность, соответствующая объекту внутри массива документа

Это означает, что я хотел бы найти все документы, которые имеет теги {бренда: «Бош», типа: «холодильник»} & & {типа: «морозильник», цвет: «белый»} или любую другую комбинацию тегов. Возможно ли это в монго? Как я могу это сделать или есть хорошее объяснение где-то, что объясняет это?

{ 
"_id" : ObjectId("53bd7837156aa38914f55176"), 
"user_id" : "53bd1a0d237e7d44120a51d1", 
"tags" : [ 
    { 
     "brand" : "bosch", 
     "type" : "fridge", 
     "color" : "black" 
    }, 
    { 
     "brand" : "electrolux", 
     "type" : "freezer", 
     "color" : "white" 
    } 
] 
} 

ответ

2

Вы должны использовать $elemMatch оператора, чтобы соответствовать поддокумент и $all оператор для объединения нескольких операторов $ elemMatch:

db.coll.find({ 
    "tags" : { 
     "$all" : [ 
      {"$elemMatch" : {"brand": "bosch", "type" : "fridge"}}, 
      {"$elemMatch" : {"type": "freezer", "color": "white"}} 
     ] 
    } 
}); 

Этот запрос будет найти все документы, которые имеют поддокументы, которые заданные значения в оба поля (т.е. бренд & & тип и тип & & цвет).

Следующий документ НЕ подкрепляться вышеупомянутого запроса (обратите внимание, что значение полей типа перепутаны):

{ 
    ... 
    "tags" : [ 
     { 
      "brand" : "bosch", 
      "type" : "freezer" 
     }, 
     { 
      "brand" : "electrolux", 
      "type" : "fridge" 
     } 
    ] 
} 
Смежные вопросы