Как сделать поиск с массивом в mongoDB - PullRequest
0 голосов
/ 20 января 2019

сегодня я начал работать с MongoDB. Я создал две коллекции: Ресторан и Часы открытия. Я вставил данные в базу данных с помощью следующего кода:

   db.OpeningHours.insert({
        day: "Sunday",
        from: "10.00am",
        to: "16.00pm"
});

    db.Restaurant.insert({
         name: "Restaurant01",
         openingHoursId: 
           [
             {id: db.OpeningHours.find({day: "Sunday", from: "10.00am", to: "16.00pm"})[0]._id},
           ]
});

Ресторан содержит массив идентификаторов открытия часов. Я хочу написать запрос с поиском, чтобы я получил все данные из ресторана и данные за соответствующие часы работы. Вот мой код, и если я его запустил, я получаю сообщение об ошибке: Команда не выполнена ...

db.Restaurant.aggregate([
{
    $unwind: "$openingHoursId",
    $lookup:
        {
            from: "OpeningHours",
            localField: "id",
            foreignField: "_id",
            as: "RestaurantHours"
        }
}
])

Ожидаемый результат, который я хочу, выглядит примерно так:

{
   "_id": ObjectId("5c43b6c8d0fa3ff24621f749"),
   "name": "Restaurant01",
   "openingHoursId": 
          [
              {
                 "id": ObjectId("5c43b6c8d0fa3ff2462fg93e")
              }
          ],
   "RestaurantHours" :
          [ 
              {
                  "_id": ObjectId("5c43b6c8d0fa3ff2462fg93e"),
                  "day": "Sunday",
                  "from": "10.00am",
                  "to": "16.00pm"  
              }
          ]
}

1 Ответ

0 голосов
/ 20 января 2019

Ваш localField должен быть openingHoursId.id не только id

db.Restaurant.aggregate([
  { "$unwind": "$openingHoursId" },
  { "$lookup": {
    "from": "OpeningHours",
    "localField": "openingHoursId.id",
    "foreignField": "_id",
    "as": "openingHoursId.RestaurantHours"
  }},
  { "$unwind": "$openingHoursId.RestaurantHours" },
  { "$group": { 
    "_id": "$_id",
    "name": { "$first": "name" },
    "openingHoursId": { "$push": "openingHoursId" }
  }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...