首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongo:在嵌套字段中获取对象计数的查询

Mongo:在嵌套字段中获取对象计数的查询
EN

Stack Overflow用户
提问于 2013-08-12 09:54:43
回答 2查看 4.7K关注 0票数 1

我需要一些帮助,以便在所有文档中对字段中的嵌套对象创建计数查询。每个文档json都有许多字段。一个称为“热链接”的特定字段由许多内部动态对象字段组成。

代码语言:javascript
复制
Doc1:
{
  hotlinks : { 112222:{....} , 333333: {.....} , 545555: {.....}      }
}

Doc2:
{
  hotlinks : { 67756:{....} , 756767: {.....} , 1111111: {.....}      }
}

每个文档都有一个热链接字段。热链接字段包括各种内部热链接对象。每个键都是一个java唯一的id,并且有包含数据的对象(内部字段)。

我需要一种方法来获得字段的所有内部嵌套对象的计数-“hotlinks”。例如,在doc1和doc2中,热链接的内部对象之和为6。

是否有任何方法可以通过一个查询来获得所有文档的计数。

非常感谢,卡兰

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-12 09:59:57

这可能不是最好的方法,但您可以定义一个javascript变量并总结计数。即;

代码语言:javascript
复制
var hotlinkTotal=0;
db.collection.find().forEach(function(x){hotlinkTotal+=x.hotlinks.length;});
print(hotlinkTotal);
票数 1
EN

Stack Overflow用户

发布于 2019-01-11 14:58:23

如果通过聚合框架使用MongoDB 3.6和更新版本,则很有可能。使用聚合管道中的$objectToArray操作符将文档转换为数组。返回数组包含原始文档中每个字段/值对的元素。返回数组中的每个元素都是包含两个字段kv的文档。

在获取数组时,您可以使用$size操作符,它返回给定数组中的元素数,从而给出每个文档的计数。

要获得所有文档的计数,需要一个$group管道,其中指定_id键为null或一个常量值,用于计算所有输入文档作为一个整体的累积值。

所有这些都可以通过嵌套表达式在一个管道中完成,如下所示:

代码语言:javascript
复制
db.collection.aggregate([
    { "$group": {
        "_id": null,
        "count": {
            "$sum": { 
                "$size": { "$objectToArray": "$hotlinks" }
            }
        }
    } }     
])

示例输出

代码语言:javascript
复制
{
    "_id" : null,
    "count" : 6
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18184100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档