如何访问 MongoDB 中的嵌套数组?

Posted

技术标签:

【中文标题】如何访问 MongoDB 中的嵌套数组?【英文标题】:how to Access nested Arrays in MongoDB? 【发布时间】:2020-05-14 09:34:52 【问题描述】:

我在 MongoDB 中有一个名为 Product 的文档。产品有一个类别数组,类别有一个子类别数组。

我正在尝试完成两件我遇到困难的事情。 1:检索给定产品ID的类别[]。例如:

products/10/categories -> categories[]

2:检索给定产品 ID 和类别 ID 的子类别[]。例如:

products/10/categories/11/subcategories -> 子类别[]

我的架构如下:

Products : [

    "id": "productId",
    "name": "productName",
    "price": "productPrice",
    "Categories": [
        
            "_id": "catId",
            "name": "catName",
            "Subcategories": [
                
                    "_id": "subcatId",
                    "name": "subcatName"
                ,
                
                    "_id": "subcatId",
                    "name": "subcatName"
                ,
            ]
        ,
        
            "_id": "catId",
            "name": "catName",
            "Subcategories": [
                
                    "_id": "subcatId",
                    "name": "subcatName"
                ,
                
                    "_id": "subcatId",
                    "name": "subcatName"
                ,
            ]
        
    ]

]

任何帮助将不胜感激!谢谢!

【问题讨论】:

【参考方案1】:

对于你的第一个问题,你可以这样写查询

db.collection.aggregate([
  
    $match: 
      "id": "productId"
    
  ,
  
    $unwind: "$Categories"
  ,
  
    $project: 
      "_id": "$Categories._id",
      "name": "$Categories.name"
    
  
])

对于您的第二个查询,请执行此操作

db.collection.aggregate([
  
    $match: 
      "id": "productId"
    
  ,
  
    $unwind: "$Categories"
  ,
  
    $match: 
      "Categories._id": "catId"
    
  ,
  
    $unwind: "$Categories.Subcategories"
  ,
  
    $project: 
      _id: "$Categories.Subcategories._id",
      name: "$Categories.Subcategories.name"
    
  
])

【讨论】:

已经完成了。我能再问你一个关于使用聚合更新的问题吗? 如果需要您发布更多详细信息,您可以在此处发布另一个问题并分享链接,我很乐意提供帮助 I have posted the question here

以上是关于如何访问 MongoDB 中的嵌套数组?的主要内容,如果未能解决你的问题,请参考以下文章

在 Mongo 集合中更新数组中的一条记录

如何更新nodejs中的mongo嵌套数组?

从Mongo DB嵌套数组中获取不同的值并输出到单个数组

MongoDB在对象数组中获取嵌套在对象数组中的单个对象

MongoDB & Meteor - 推入嵌套数组的查询不起作用,没有抛出错误

合并数组中的两个对象,其中一个对象的键嵌套比另一个对象更深,位于 Mongo DB 的同一文档中