Mongo查询以获取不同的嵌套文档 [英] Mongo Query to fetch distinct nested documents

查看:40
本文介绍了Mongo查询以获取不同的嵌套文档的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要获取不同的嵌套文档.

I need to fetch distinct nested documents.

请找到示例文档:

{
    "propertyId": 1001820437,
    "date": ISODate("2020-07-17T00:00:00.000Z"),
    "HList":[
        {
            "productId": 123,
            "name": "Dubai",
            "tsh": true
        }
    ],
    "PList":[
        {
            "productId": 123,
            "name": "Dubai",
            "tsh": false
        },
        {
            "productId": 234,
            "name": "India",
            "tsh": true
        }
    ],
    "CList":[
        {
            "productId": 234,
            "name": "India",
            "tsh": false
        }
    ]
}

预期结果是:

{
    "produts":[
        {
            "productId": 123,
            "name": "Dubai"
        },
        {
            "productId": 234,
            "name": "India"
        }
    ]
}

我尝试了以下查询:

 db.property.aggregate([
    { 
        $match: { 
            "propertyId": 1001820437,
            "date": ISODate("2020-07-17T00:00:00.000Z")
        }
    },
    { 
        "$project": {
            "_id": 0,
            "unique": {
                "$filter": {    
                    "input": {
                        "$setDifference": [
                            { 
                                "$concatArrays": [
                                    "$HList.productId",
                                    "$PList.productId",
                                    "$CList.productId"
                                ]
                            },
                            []
                        ]  
                    },
                    "cond": { 
                        "$ne": [ "$$this", "" ] 
                    }
                }
            }
        }
    }
]);

这里 $ setDifference 聚合是正确的选择吗?
我的查询仅返回唯一的产品ID,但我需要具有 name productId .有人可以帮我解决这个问题吗?预先感谢

Is $setDifference aggregation is correct choice here?
My query returns only unique product ids but i need a productId with name. Could someone help me to solve this? Thanks in advance

推荐答案

db.collection.aggregate([
   { 
      $match: { 
               "propertyId": 1001820437,
               "date": ISODate("2020-07-17T00:00:00.000Z")
    
               }
    },
    {
        $project: {
            products: {
                $filter: {
                 input: { "$setUnion" : ["$CList", "$HList", "$PList"] },
                 as: 'product',
                 cond: {}
                 }
            }
         }
    },
    {
       $project: {            
                   "_id":0,
                   "products.tsh": 1,
                   "products.name": 1,           
                 }
    }, 
])

这篇关于Mongo查询以获取不同的嵌套文档的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆