我们如何在mongodb聚合中只保留唯一的文档
如果我们需要在两个集合中使用查找,那么即使在使用$group stage之后,如何保留所有值。 i、 我想我有两个样本集 col1我们如何在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
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
])
很抱歉反应太晚,我尝试了这个方法,但效果很好。谢谢:-)