найти поле $в массиве встроенных документов?

#mongodb #mongoose #mongodb-query #nosql

#mongodb #мангуст #mongodb-запрос #nosql

Вопрос:

Каков правильный синтаксис для поиска всех документов, где в массиве встроенных документов имя пользователя равно ‘User1’?

Эти варианты еще не сработали:

 db.collection.find( { to: { username: { $in: [ "User1" ] } } } )
db.collection.find( { to: { $in: [ { username: "User1" } ] } } )
  

Документы выглядят так:

 {
    "message" : "Here's a Message",
    "to" : [
        {
            "user" : ObjectId("53aada6f8b10eb0000ec8a90"),
            "username" : "User1",
            "updated" : ISODate("2014-06-28T19:14:20Z"),
            "_id" : ObjectId("53af140c14809099b615d347"),
            "read" : {
                "marked" : false
            }
        }
        {
            "user" : ObjectId("53aada6f8b10eb0000ec8a91"),
            "username" : "User2",
            "updated" : ISODate("2014-06-28T19:15:20Z"),
            "_id" : ObjectId("53af140c14809099b615d348"),
            "read" : {
                "marked" : false
            }
        }
    ]
}
  

Ответ №1:

Вы хотите использовать точечную нотацию для доступа к элементам массива. Правильный синтаксис:

 db.collection.find({"to.username": { $in: ["User1"] }});
  

Оператор $in используется, когда вы ищете несколько значений.
Если вы ищете только с одним значением, более эффективным запросом является простая проверка равенства:

 db.collection.find({"to.username": "User1"});