我有一个集合名称 Alpha_Num,它具有以下结构。我正在尝试找出哪个字母数字对将出现最大次数?
如果我们只使用下面的数据,对 abcd-123 出现两次,所以对 efgh-10001,但第二个对我来说不是有效的情况,因为它出现在同一个文档中。
{
"_id" : 12345,
"Alphabet" : "abcd",
"Numerals" : [
"123",
"456",
"2345"
]
}
{
"_id" : 123456,
"Alphabet" : "efgh",
"Numerals" : [
"10001",
"10001",
"1002"
]
}
{
"_id" : 123456567,
"Alphabet" : "abcd",
"Numerals" : [
"123"
]
}
我尝试使用聚合框架,如下所示
db.Alpha_Num.aggregate([
{"$unwind":"$Numerals"},
{"$group":
{"_id":{"Alpha":"$Alphabet","Num":"$Numerals"},
"count":{$sum:1}}
},
{"$sort":{"count":-1}}
])
这个查询中的问题是它给出了对 efgh-10001 两次。 问题:如何在上述条件下从数组“数字”中选择不同的值?
最佳答案
问题解决了。
db.Alpha_Num.aggregate([{
"$unwind": "$Numerals"
}, {
"$group": {
_id: {
"_id": "$_id",
"Alpha": "$Alphabet"
},
Num: {
$addToSet: "$Numerals"
}
}
}, {
"$unwind": "$Num"
}, {
"$group": {
_id: {
"Alplha": "$_id.Alpha",
"Num": "$Num"
},
count: {
"$sum": 1
}
}
}])
使用 $addToSet 进行分组并再次展开就可以了。从 10gen 在线类(class)之一中得到了答案。
关于mongodb - 从 MongoDB 中的数组中选择不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15915968/