Mongodb聚合与不同

时间:2015-08-27 20:38:47

标签: mongodb

对Mongodb来说是全新的我已经找到了答案而且找不到这个问题。如何向聚合查询添加distinct选项? 我有一个谱系数据库,我希望找到在特定年份培育出最多窝的育种者。我有一个领域" DOB"在其他查询中,我可以发现2013年有多少窝是由#34;史密斯"用这个:

db.ped.distinct("DOB", {$and:[{"Breeder":{$regex: /Smith/}}, {"DOB-Year":2013}]}).length

我可以弄清楚有多少只猫,因为同一个种鸽的多只狗有相同的生日来自同一窝。 我想将它与聚合一起使用,但是我们无法弄清楚查询的外观。这是我到目前为止所使用的,但由于每个文件都是一只狗,我得到了当年饲养员培育的全犬。

db.ped.aggregate( [
    {$match : {"DOB-Year" : 2013}},
    {$group : {_id : "$Breeder", "count" : {$sum : 1}}},
    {$sort : {"count" : -1}},
    {$limit : 15}
] )

有没有办法在汇总查询中使用$distinct? 感谢。

回应马里奥

我认为这不是我想要的结果。我不确定我到底得到了什么,但看看我在这里得到了什么。我已对数据进行了清理。

> db.ped.aggregate([
...     {
...         $match: {
...             "DOB-Year": 2014
...         }
...     },
...     {
...         $group: {
...             _id: {
...                 "Breeder": "$Breeder",
...                 "DOB": "$DOB"
...             },
...             "count": {
...                 $sum: 1
...             }
...         }
...     },
...     {
...         $sort: {
...             "count": -1
...         }
...     },
...     {
...         $limit: 1
...     }
...  ])
{ "_id" : { "Breeder" : "Smith", "DOB" : "09/15/2014" }, "count" : 9 }

> db.ped.distinct("DOB", {"Breeder":{$regex: /Smith/},"DOB-Year":2014}).length
5

显然,我真正想要的第一段代码应该为Smith说5。 以下是我正在使用的数据示例。

{
    "_id" : ObjectId("55df4a8cc0bfbb6622ae8395"),
    "PedID" : 54321,
    "RegNum" : "12345",
    "RegName" : "My Dog Name",
    "Owner" : "Smith",
    "Sex" : "Dog",
    "Color" : "Black & Tan",
    "Sire" : "My Boy Bob",
    "Dam" : "My Girl Betty",
    "Breeder" : "Smith",
    "DOB" : "10/18/2014",
    "DOB-Year" : 2014
}

1 个答案:

答案 0 :(得分:1)

由于您愿意按DOB进行分组,因此请将其包含在_id的{​​{1}}中,如下所示:

group

注意:顺便提一下,请注意,在您的不同示例中,不需要db.ped.aggregate([ { $match:{"DOB-Year":2014} }, { $group: { _id: { "Breeder": "$Breeder", "DOB": "$DOB" }, "count": { $sum: 1 } } }, { $sort: { "count": -1 } }, { $limit: 15 } ]) 运算符:您可以这样做

$and

因为当你只使用逗号时db.ped.distinct("DOB", {"Breeder":{$regex: /Smith/},"DOB-Year":2013}).length 是隐含的,只有在特殊情况下才需要它

编辑:

在您上次发表评论后,我意识到您需要分组两次:

第一次由Breeder和出生日分组找到小窝,然后由Breeder将结果分组,以找到有更多窝的小鼠。您的汇总应如下:

$and