#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"});