作为 Mongodb 的新手,我搜索了一个答案,但没有找到这个问题的答案。如何将 distinct 选项添加到聚合查询? 我有一个谱系数据库,我想在其中找到在特定年份繁殖最多窝的育种者。我有一个字段“DOB”,在其他查询中我可以找到“Smith”在 2013 年繁殖了多少窝:
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
}
最佳答案
由于您也愿意按DOB
进行分组,因此您应该将其包含在group
的_id
中,如下所示:
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
因为 $and
在只使用逗号时是隐式的,只有在特殊情况下才需要它
编辑:
在您最后发表评论后,我意识到您需要分组两次:
第一次按饲养员和出生日期分组以查找窝,然后按饲养员对结果分组以查找窝数更多的窝。您的聚合应如下所示:
db.ped.aggregate([
{
$match: {
"DOB-Year": 2014
}
},
{
$group: {
_id: {
"Breeder": "$Breeder",
"DOB": "$DOB"
},
"count": {
$sum: 1
}
}
},
{
$group: {
_id: {
"Breeder": "$_id.Breeder"
},
"count": {
$sum: 1
}
}
},
{
$sort: {
"count": -1
}
},
{
$limit: 15
}
]);
关于具有不同的 Mongodb 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32259009/