对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
}
答案 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