Как я могу искать встроенные документы в mongodb? - PullRequest
0 голосов
/ 10 октября 2018

У меня есть такая коллекция

{
    "_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 Ответ

0 голосов
/ 10 октября 2018

Вы можете попробовать агрегацию ниже, используя $unwind и $replaceRoot

db.collection.aggregate([
  { "$match": { "favBooks.price": { "$lt": 400 }}},
  { "$unwind": "$favBooks" },
  { "$match": { "favBooks.price": { "$lt": 400 }}},
  { "$replaceRoot": { "newRoot": "$favBooks" }}
])
...