MongoDb查询需要加框

时间:2015-01-28 14:00:52

标签: mongodb

我有一个名为' Dealer'以下字段。

1)userId 2)dealerId 3)代码 4)原产地(具有价值观' UUM',' MMT',' TTC')

在上面的集合中,我需要通过(userId + dealerId)的独特组合获得独特的经销商记录。如果两个记录具有相同的&user;' userId'和' dealerId'那么我需要检查原点字段和记录的值不等于' UUM'需要在结果集中返回。

这就是我现在所达到的目标:

db.dealer.aggregate(
     [ 
        { 
           $sort: { origin: 1 } 
        }, 
        {
           $group: 
           { 
              _id: { 
                      dealerId:"$dealerId",
                      recordId:"$recordId"
                    }, 
              origin: { 
                      $first: "$origin" 
                    }
            } 
         } 
      ])

如何为上述场景进行聚合查询。非常感谢。

提前致谢。

1 个答案:

答案 0 :(得分:1)

为减少内存使用量,我会过滤掉没有UUM来源的文档。 然后由经销商和用户组成。

我不确定您为什么要按经销商+记录进行排序和分组。

设置

> db.dealerTest.find()
{ "_id" : 1, "userId" : "u1", "dealerId" : "d1", "code" : 1, "origin" : "UUM" }
{ "_id" : 2, "userId" : "u1", "dealerId" : "d1", "code" : 2, "origin" : "UUM" }
{ "_id" : 3, "userId" : "u1", "dealerId" : "d1", "code" : 3, "origin" : "TTC" }
{ "_id" : 4, "userId" : "u2", "dealerId" : "d1", "code" : 4, "origin" : "TTC" }
{ "_id" : 5, "userId" : "u2", "dealerId" : "d1", "code" : 5, "origin" : "MMT" }
{ "_id" : 6, "userId" : "u2", "dealerId" : "d2", "code" : 6, "origin" : "UUM" }

代码:

db.dealerTest.aggregate([{
    $match: {
        origin: {
            $ne: "UUM"
        }
    }
}, {
    $group: {
        _id: {
            dealerId: "$dealerId",
            userId: "$userId"
        },
        docIds: { $addToSet : "$_id" },
        origins: { $addToSet : "$origin" }
    }
}]);

输出:

{ "_id" : { "dealerId" : "d1", "userId" : "u2" }, "docIds" : [ 5, 4 ], "origins" : [ "MMT", "TTC" ] }
{ "_id" : { "dealerId" : "d1", "userId" : "u1" }, "docIds" : [ 3 ], "origins" : [ "TTC" ] }