Mongodb聚合和展开行为-重复
我目前正在使用以下查询来展开和“加入”多个集合:Mongodb聚合和展开行为-重复,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我目前正在使用以下查询来展开和“加入”多个集合: User.aggregate([{ "$match": { "verified": true, "active_account": true } }, { "$lookup": {
User.aggregate([{
"$match": {
"verified": true,
"active_account": true
}
},
{
"$lookup": {
"from": "screens",
"localField": "_id",
"foreignField": "user_obj",
"as": "screenings"
}
},
{
"$unwind": "$screens"
},
{
"$lookup": {
"from": "drinks",
"localField": "_id",
"foreignField": "user_id",
"as": "drinks"
}
},
{
"$unwind": "$drinks"
},
{
"$group": {
"_id": "$_id",
"smsmobile": {
"$first": "$smsmobile"
},
"screens": {
"$push": "$screens"
},
"drinks": {
"$push": "$drinks"
}
}
}
]...
我目前遇到的问题是,对于饮料和屏幕,它们都有重复的记录——但在实际数据库中,它们是单个项目。例如,数据库中的屏幕只有两条记录,但在上述过程中输出了四条记录
似乎聚合展开过程正在生成这些重复项。我欢迎对此有任何想法
屏幕的输出示例如下所示。请注意_id,它本身的集合中没有重复项
[ { _id: 58e901837a085502ec6b4b6b,
updatedAt: 2017-04-08T15:28:03.153Z,
createdAt: 2017-04-08T15:28:03.153Z,
user_obj: 58e901267a085502ec6b4b69,
screen: 1,
difficult_sit: 1,
group: 2,
__v: 0 },
{ _id: 58e901837a085502ec6b4b6b,
updatedAt: 2017-04-08T15:28:03.153Z,
createdAt: 2017-04-08T15:28:03.153Z,
user_obj: 58e901267a085502ec6b4b69,
screen: 1,
difficult_sit: 1,
group: 2,
__v: 0 },
{ _id: 58eb4001ee18b403f05a9043,
updatedAt: 2017-04-10T08:19:13.857Z,
createdAt: 2017-04-10T08:19:13.857Z,
user_obj: 58e901267a085502ec6b4b69,
screen: 1,
difficult_sit: null,
group: 2,
__v: 0 },
{ _id: 58eb4001ee18b403f05a9043,
updatedAt: 2017-04-10T08:19:13.857Z,
createdAt: 2017-04-10T08:19:13.857Z,
user_obj: 58e901267a085502ec6b4b69,
screen: 1,
difficult_sit: null,
group: 2,
__v: 0 } ]
这是因为$lookup。我猜您在
饮料
或屏幕
中有多个文档具有相同的正确用户id或用户对象。每个集合中的每个用户都有多个项目。我以为查寻可以解决这个问题?你什么意思?如果存在重复项,Mongodb无法选择保存哪个文档,因此它返回所有内容数据库本身没有重复项。这是创建副本的过程。请在$group
阶段中使用“screens”:{“$addToSet”:“$screens”},“drinks”:{“$addToSet”:“$drinks”}
,或尝试移动{“$diswind”:“$screens”},
在第二个$lookup
阶段之后。