在 mongodb 中执行重复过滤

Posted

技术标签:

【中文标题】在 mongodb 中执行重复过滤【英文标题】:Performing Repeated filtering in mongodb 【发布时间】:2020-12-03 10:06:51 【问题描述】:

我想获取在 bmw 工作的人的姓名,并使用这些姓名作为过滤器来查找并返回包含字段“car”的文档。所以最终结果必须是本例中给出的最后两个文档。

[
    "_id": "235", "name": "indu", "dob": "31/4/15", "company": "bmw",
    "_id": "236", "name": "prith", "dob": "01/4/98", "company": "bmw",
    "_id": "237", "name": "rames", "dob": "07/4/00", "company": "renault",
    "_id": "238", "name": "indu", "salary": "10,000", "car": "yes", "married": "yes",
    "_id": "239", "name": "prith", "salary": "80,000", "car": "yes", "children": "no"
]

感谢您的帮助,在此先感谢

【问题讨论】:

【参考方案1】:

你想使用$exists

names = db.collection.distinct"name", "company": "bmw")
db.collection.find("car": "$exists": true, "name": "$in": names)

你也可以在 1 个聚合调用中完成,但我不推荐它,因为它的效率较低。

db.collection.aggregate([
    
       "$match": 
           "company": "bmw"
          
    ,
    
        $lookup: 
            from: "this_collection",
            localField: "name",
            foreignField: "name",
            as: "roots"
        
    ,
    
        "$unwind": "$roots"
    ,
    
        "$replaceRoot": 
            "newRoot": "$roots"
        
    ,
    
        "$match": 
            "car": "$exists": true
        
    
])

【讨论】:

不错的解决方案..解决了我的问题..谢谢汤姆

以上是关于在 mongodb 中执行重复过滤的主要内容,如果未能解决你的问题,请参考以下文章

mongodb - 按选定值过滤查询[重复]

Mongodb聚合$lookup $project和$match不起作用[重复]

Mongodb聚合$lookup $project和$match不起作用[重复]

Mongodb聚合数组大小大于匹配[重复]

Mongodb聚合数组大小大于匹配[重复]

如何在 MongoDB 中执行 Joinquery 并进行搜索?