Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们如何在mongodb聚合中只保留唯一的文档_Mongodb_Aggregation Framework - Fatal编程技术网

我们如何在mongodb聚合中只保留唯一的文档

我们如何在mongodb聚合中只保留唯一的文档,mongodb,aggregation-framework,Mongodb,Aggregation Framework,如果我们需要在两个集合中使用查找,那么即使在使用$group stage之后,如何保留所有值。 i、 我想我有两个样本集 col1 name: 'abc', phoneNo:888######4, vCode:20166, dcode:30166, city:'city1', profession:'profession1' name: 'name1', phoneNo:999######1, vCode:20167, dcode:30166, city:'city2', professio

如果我们需要在两个集合中使用查找,那么即使在使用$group stage之后,如何保留所有值。 i、 我想我有两个样本集 col1

name: 'abc',
phoneNo:888######4,
vCode:20166,
dcode:30166,
city:'city1',
profession:'profession1'


name: 'name1',
phoneNo:999######1,
vCode:20167,
dcode:30166,
city:'city2',
profession:'profession2'


name: 'abc',
phoneNo:888######4,
vCode:20166,
dCode:30166
city:'city1'
profession:'profession1'
col2

name:'name1'
phoneNo:'999######1'
dCode:30166,
vCode:20167
profession:'profession2'
我在col1中有3个文档,其中2个文档是重复的。现在我需要找出col2中不存在的文档。下面是我构建的查询

db.col1.aggregate([
   { 
        $lookup: {
            from: "col2",
            let: {
                vCode: '$vCode',
                dCode: '$dCode',
            },
            pipeline: [
                {
                    $match: {
                        $expr: {
                            $and: [
                                { $eq: ["$dCode", "$$dCode"] },

                                { $eq: ["$vCode", "$$vCode"] }

                            ]
                        }
                    }
                },

            ],
            as: "col2"
        }
    },
    {
        $match: { col2: [] }
    }, {
        $project: {
           col2: 0
        }
    }
])
现在,上面的查询将返回col2中不存在的所有文档。 但是,由于COL1中有两个重复的文档,因此查询也同时返回了文档。任何建议如何筛选出重复的文档,并只保留不匹配的和唯一的文档。

< P>您可以在运行<代码> $查找> /代码>:

之前将属性复制为重复的属性。
db.collection.aggregate([
    {
        $group: {
            _id: {
                name: "$name",
                phoneNo: "$phoneNo",
                vCode: "$vCode",
                dCode: "$dCode",
                city: "$city",
                profession: "$profession",
            }
        }
    },
    {
        $replaceRoot: {
            newRoot: "$_id"
        }
    }
    // your aggregation pipeline stages
])

很抱歉反应太晚,我尝试了这个方法,但效果很好。谢谢:-)