首页 > 解决方案 > 如何在 mongoDB 中查找数组

问题描述

今天我开始使用 MongoDB。我创建了两个系列:Restaurant 和 OpeningHours。我已使用以下代码将数据插入数据库:

   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},
           ]
});

餐厅包含一组 OpeningHours 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"  
              }
          ]
}

标签: databasemongodbnosql

解决方案


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" }
  }}
])

推荐阅读