Как я могу искать встроенные документы в mongodb?
У меня есть такая коллекция
{
"_id" : ObjectId("5bbe1867839c0d2b4bdffcb2"),
"name" : "Jyothish",
"favBooks" : [
{
"title" : "Let us C",
"author" : "Yaswanth Kanetkar",
"price" : 400
},
{
"title" : "Winner stands alone",
"author" : "Paulo Coelho",
"price" : 340
}
]
}
{
"_id" : ObjectId("5bbe1b62839c0d2b4bdffcb3"),
"name" : "John",
"favBooks" : [
{
"title" : "Broken Republic",
"author" : "Arundhathi Roy",
"price" : 200
},
{
"title" : "One Life to Ride",
"author" : "Ajit Harisinghani",
"price" : 250
}
]
}
Есть ли способ поиска любимых книг, стоимость которых меньше 400?
То, что я сейчас пытаюсь
db.p.find({"favBooks.price":{$lt:400}}).pretty()
Но при этом вернутся все документы, у которых есть пункт favBook с ценой менее 400.
Какой выход я ожидаю
{
{
"title" : "Winner stands alone",
"author" : "Paulo Coelho",
"price" : 340
},
{
"title" : "Broken Republic",
"author" : "Arundhathi Roy",
"price" : 200
},
{
"title" : "One Life to Ride",
"author" : "Ajit Harisinghani",
"price" : 250
}
}
Это возможно?
Заранее спасибо:)
1 ответ
Решение
Вы можете попробовать агрегацию ниже, используя $unwind
а также $replaceRoot
db.collection.aggregate([
{ "$match": { "favBooks.price": { "$lt": 400 }}},
{ "$unwind": "$favBooks" },
{ "$match": { "favBooks.price": { "$lt": 400 }}},
{ "$replaceRoot": { "newRoot": "$favBooks" }}
])