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
阶段之后。