Mongodb Aggregation以嵌套方式推送带有子文档数组字段的文档数组字段

时间:2019-04-14 10:46:49

标签: mongodb mongoose

在MongoDB中,文档具有以下结构:

[{
    "_id" : ObjectId("5caba072e9157250d2d411c6"),
    "products" : [],
    "categories" : [ 
        {
            "_id" : ObjectId("5cb0e1ac3525485a3dde8336"),
            "name" : "Category Name",
            "title" : "Category Title",
            "description" : "",
            "products" : [],
            "picture" : ObjectId("5cab9ff6e9157250d2d411c2")
            "subCategories" : [ 
                {
                    "_id" : ObjectId("5cb0e1ac3525485a3dde8337"),
                    "name" : "Sub Category Name",
                    "title" : "Sub Category Title",
                    "description" : "Description",
                    "picture" : ObjectId("5caba013e9157250d2d411c3")
                    "products" : [ 
                        {
                            "picture" : [ 
                                ObjectId("5caba028e9157250d2d411c4"), 
                                ObjectId("5caba02fe9157250d2d411c5")
                            ],
                            "buttonStatus" : true,
                            "_id" : ObjectId("5cb0e1ac3525485a3dde8338"),
                            "title" : "Title ",
                            "subtitle" : "Sub title",
                        }
                    ],
                }
            ],
        }
    ],
    "createdAt" : ISODate("2019-04-08T19:26:42.671Z"),
    "updatedAt" : ISODate("2019-04-12T19:06:20.552Z"),
    "__v" : 3,
    "qrcode" : ObjectId("5caba074e9157250d2d411ca")
},
... // Other Documents
]

基本上,我的架构是在三级层次结构中定义的,即

  • 无类别的产品
  • 类别内的产品
  • 类别子类别中的产品。

我必须将所有产品合并到一个列表中,并根据产品ID放置过滤器。以下是我开始的查询

Product.aggregate([
    // Get all the matching documents.
    {
      $match: {
        $or: [
          {
            'products._id': {
              $in: ids
            }
          }, {
            'categories.products._id': {
              $in: ids
            }
          }, {
            'categories.subCategories.products._id': {
              $in: ids
            }
          }
        ]
      }
    }
]

我尝试了$ addToSet,$ push,但是在子类别的情况下失败了。任何帮助将不胜感激,这让我理解了这个概念。

0 个答案:

没有答案