mongoDb 查找文档中的条目数和按字段区分的条目

Posted

技术标签:

【中文标题】mongoDb 查找文档中的条目数和按字段区分的条目【英文标题】:mongoDb find number of entries in a document and distinct entries by field 【发布时间】:2015-10-10 14:21:25 【问题描述】:

我的文档结构是:

[
    "l": 
    "ln": "Hyderabad",

    ,
    "cid": "customer1",
    "created": ISODate("2015-07-20T13:15:45.198        Z")
, 
    "l": 
    "ln": "Hyderabad",

    ,
    "cid": "customer2",
    "created": ISODate("2015-07-20T13:15:45.198        Z")
, 
    "l": 
    "ln": "Delhi",

    ,
    "cid": "customer3",
    "created": ISODate("2015-07-20T13:15:45.198        Z")
, 
    "l": 
    "ln": "Delhi",

    ,
    "cid": "customer3",
    "created": ISODate("2015-07-20T13:15:45.198        Z")
, 
    "l": 
    "ln": "Bangalore",

    ,
    "cid": "customer1",
    "created": ISODate("2015-07-20T13:15:45.198        Z")
, 
    "l": 
    "ln": "Bangalore",

    ,
    "cid": "customer5",
    "created": ISODate("2015-07-20T13:15:45.198        Z")
, 
    "l": 
    "ln": "Bangalore",

    ,
    "cid": "customer6",
    "created": ISODate("2015-07-20T13:15:45.198        Z")
, 
    "l": 
    "ln": "Bangalore",

    ,
    "cid": "customer6",
    "created": ISODate("2015-07-20T13:15:45.198        Z")
]

我的 o/p 应该是:

[
    "ln": "Hyderabad",
    "entries": 2,
    "numberofdistinctcustomers": 2,
    "customers": [
    "customer1",
    "customer2"
    ]
 
    "ln": "Delhi",
    "entries": 2,
    "numberofdistinctcustomers": 1,
    "customers": [
    "customer3"
    ]
 
    "ln": "Bangalore",
    "entries": 4,
    "numberofdistinctcustomers": 3,
    "customers": [
    "customer1",
    "customer5",
    "customer6"
    ]
]

有人可以帮我吗?我知道为此我们需要使用 $group by ln 来查找 entries。如何找到不同cids 的数量?

请帮我解决这个问题?

【问题讨论】:

【参考方案1】:

您应该使用aggregation 来获得预期的输出。

首先您需要按l.ln 分组,然后使用$addToSet 获得不同的customers。要获得numberofdistinctcustomers,您可以在投影中使用$size 运算符。

查询将如下所示:

db.collection.aggregate(
    $group: 
    _id: "$l.ln",
    "entries": 
        $sum: 1
    ,
    "dis": 
        $addToSet: "$cid"
    
    
, 
    $project: 
    "ln": "$_id",
    "entries": 1,
    "customers": "$dis",
    "numberofdistinctcustomers": 
        "$size": "$dis"
    
    
)

【讨论】:

@user1920 你遇到了什么错误?在实现上述查询时,您可能会遗漏一些东西。 我收到以下错误:Error("Printing Stack Trace")@:0 ()@src/mongo/shell/utils.js:37 ([object Object],[object Object] )@src/mongo/shell/collection.js:866 @(shell):17 未捕获的异常:聚合失败:“errmsg”:“异常:无效的运算符'$size'”,“代码”:15999,“确定” : 0 如果我删除 "numberofdistinctcustomers": "$size": "$dis" 它工作正常@Vishwas

以上是关于mongoDb 查找文档中的条目数和按字段区分的条目的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB索引管理

通过键字段查找 MongoDB 集合中的所有重复文档

mongodb中的嵌套条目,仅在子字段的最大值上求和和平均值

MongoDB:通过不存在的字段查找文档?

mongodb使用条件查找文档并更新相应文档中的另一个字段

如何在任意深度查找 MongoDB 字段名称