【问题标题】:Querying a Nested Document using an array - MongoDB使用数组查询嵌套文档 - MongoDB
【发布时间】:2022-01-14 05:45:32
【问题描述】:

我有这样的文档

{
"_id" : ObjectId("61e10561a06dd136bc848b1f"),
"packagingCharges" : {
    "small" : 0,
    "medium" : 0,
    "large" : 0
},
"themeColor" : "#168EBA",
"openingTime" : "9 am",
"closingTime" : "9 pm",
"discount" : "0",
"isRestaurantActive" : true,
"restaurantName" : "Aman Restaurant",
"address" : "Faridabad",
"createdBy" : ObjectId("61dd2182871d7c2be8b41006"),
"restaurantTokenImage" : "..\\tmp\\uploads\\RestaurantImages\\1642136929834_999192.jpg",
"restaurantLogoImage" : "..\\tmp\\uploads\\RestaurantImages\\1642136929928_doreMON.JPG",
"coins" : 0,
"isGstRegistered" : true,
"offers" : [ 
    {
        "isAvailable" : true,
        "_id" : ObjectId("61e105ed202546421025c221"),
        "giftItem" : "Pizza",
        "coins" : 10,
        "menuId" : ObjectId("61e105ed202546421025c220")
    }
],
"menu" : [ 
    {
        "menuItem" : "chapati",
        "price" : 5,
        "menuItemImageName" : "979696859_054.jpg",
        "menuItemImage" : "..\\tmp\\uploads\\menuItemImages\\1642136982717_979696859_054.jpg",
        "isGift" : false,
        "isAvailable" : true,
        "excludeMe" : true,
        "_id" : ObjectId("61e10596a06dd136bc848b20"),
        "coins" : 1
    }, 
    {
        "menuItem" : "Pizza",
        "price" : 50,
        "menuItemImageName" : "979696859_054.jpg",
        "menuItemImage" : "..\\tmp\\uploads\\menuItemImages\\1642137069230_979696859_054.jpg",
        "isGift" : true,
        "isAvailable" : true,
        "excludeMe" : true,
        "_id" : ObjectId("61e105ed202546421025c220"),
        "coins" : 10
    }, 
    {
        "menuItem" : "Pasta",
        "price" : 80,
        "menuItemImageName" : "979696859_054.jpg",
        "menuItemImage" : "..\\tmp\\uploads\\menuItemImages\\1642137188767_979696859_054.jpg",
        "isGift" : false,
        "isAvailable" : true,
        "excludeMe" : true,
        "_id" : ObjectId("61e10664202546421025c222"),
        "coins" : 10
    }
],
"createdAt" : ISODate("2022-01-14T05:08:50.032Z"),
"updatedAt" : ISODate("2022-01-14T05:13:08.879Z"),
"__v" : 0

}

我想在数组 [ObjectId("61e10596a06dd136bc848b20"), ObjectId("61e105ed202546421025c220")] 的帮助下找出菜单,我不想要其余的字段。我能写的最好的查询是什么。我使用 mongo 作为数据库,使用 javascript 或 Node 作为后端

【问题讨论】:

  • 不要生气,但是您正在寻找其他人为您思考和编码,这里的大多数人都希望看到您的代码示例以表明您已经付出了一些努力让您的代码正常工作...请在编辑框中附上您的代码。

标签: javascript mongodb mongoose


【解决方案1】:
  • $match找document
  • $project 只保留menu
  • $unwind单独的menu数组
  • $match查找id _in数组
db.collection.aggregate([
  {
    "$match": {
      "menu._id": {
        "$in": [
          ObjectId("61e10596a06dd136bc848b20"),
          ObjectId("61e105ed202546421025c220")
        ]
      }
    }
  },
  {
    "$project": {
      "menu": 1
    }
  },
  {
    "$unwind": "$menu"
  },
  {
    "$match": {
      "menu._id": {
        "$in": [
          ObjectId("61e10596a06dd136bc848b20"),
          ObjectId("61e105ed202546421025c220")
        ]
      }
    }
  }
])

mongoplayground

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-14
    • 2019-10-09
    • 2021-02-25
    • 2016-08-16
    • 2015-02-10
    • 2012-10-17
    • 2016-05-07
    相关资源
    最近更新 更多