Mon goose выберите объект в массиве с указанным свойством c - PullRequest
0 голосов
/ 24 февраля 2020

Из этой коллекции «домов»

{
  _id: "0",
  rooms: [
    {
      roomName: "living-room"
      chairs: "6"
    },

    {
      roomName: "kitchen"
      chairs: "0"
    }
  ]
}

Мне нужно найти дом с _id = 0 и выбрать только «стулья» из «гостиной», чтобы результат выглядел следующим образом :

{
  chairs: 6
}

Я думаю о чем-то, похожем на это: House.findOne({_id: '0'}).select('rooms.chairs') // but only from {roomName: "living-room"} Как мне выполнить запрос?

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Как насчет этого:

db.houses.aggregate([
   { $match: { _id: "0" } },
   {
      $project: {
         chairs: {
            $filter: {
               input: "$rooms",
               cond: { $eq: ["$$this.roomName", "living-room"] }
            }
         }
      }
   },
   {
      $replaceRoot: {
         newRoot: {
            chairs: { $arrayElemAt: ["$chairs.chairs", 0] }
         }
      }
   },
])
0 голосов
/ 24 февраля 2020
db.house.findOne({"rooms.chairs":"6"},{"rooms.$":1})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...