mongodb - 从 MongoDB 中的数组中选择不同的值

标签 mongodb aggregation-framework

我有一个集合名称 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/

相关文章:

mongodb - 将 $strLenCP 与 Spring Data MongoDB 结合使用

mongodb-聚合以获取计数。

node.js - MongoDB:连接多个数组

javascript - 为什么我的异步函数不起作用?我只是想让它 console.log mongodb 查询的结果?

java - Spring Boot 和 Spring Data MongoDB : hiding fields in a ResponseBody

mysql - MongoDB 作为主要数据存储,MySQL 仅用于事务

mongodb - 在存储的圆圈内查找位置

javascript - 将 $nin 和 $sample 与 mongodb 聚合一起使用

node.js - $unset 在 Mongoose 中不起作用

node.js - Mongoose 模式 : how to set max number of items in an array?