在数组mongodb中查找重复项

时间:2019-04-21 00:02:07

标签: mongodb mongoose aggregation-framework robo3t

我有一个名为Users的Mongo Collection,其结构类似于这样

{
    _id: '1234aaa',
    profile: {
        Organizations: [A,B,C,A,B,A]
    }
},
{
    _id: '1234bbb',
    profile: {
        Organizations: [A,B,C]
    }

},
{
    _id: '1234ccc',
    profile: {
        Organizations: [A,B,C,C]
    }

}

仅在profile.organizations下具有重复值的情况下,才如何返回集合中所有文档的列表。 预期结果将是:

DupesUsers: {
    {
        User: '1234aaa,
        Dupes: [A,B]
    },
    {
        User: '1234ccc,
        Dupes: [C]
    },
}

我尝试使用Aggreagte:

db.getCollection('users').aggregate(
  {$unwind: "$profile.organizations"},
  { $project: {_id: '$_id', org: '$profile.organizations'} },
  { $group: {
        _id: null, 
        occurances: {$push: {'org': '$_id', count: '$count'}}
        }
   }
);

但是我似乎无法绕过它。

2 个答案:

答案 0 :(得分:1)

您需要做一些小调整就可以了:

db.getCollection("users").aggregate(
    [
        { 
            "$unwind" : "$profile.organizations"
        }, 
        { 
            "$group" : {
                "_id" : {
                    "dup" : "$profile.organizations", 
                    "id" : "$_id"
                }, 
                "count" : {
                    "$sum" : 1.0
                }
            }
        }, 
        { 
            "$match" : {
                "count" : {
                    "$gt" : 1.0
                }
            }
        }, 
        { 
            "$group" : {
                 _id: "$_id.id",
                 Dupes: {$push: "$_id.dup"}
            }
        }
    ], 
);

答案 1 :(得分:0)

您可以在aggregation下使用

...
TypeError: __init__() got an unexpected keyword argument 'memory_target_fraction'