我需要一些帮助,以便在所有文档中对字段中的嵌套对象创建计数查询。每个文档json都有许多字段。一个称为“热链接”的特定字段由许多内部动态对象字段组成。
Doc1:
{
hotlinks : { 112222:{....} , 333333: {.....} , 545555: {.....} }
}
Doc2:
{
hotlinks : { 67756:{....} , 756767: {.....} , 1111111: {.....} }
}每个文档都有一个热链接字段。热链接字段包括各种内部热链接对象。每个键都是一个java唯一的id,并且有包含数据的对象(内部字段)。
我需要一种方法来获得字段的所有内部嵌套对象的计数-“hotlinks”。例如,在doc1和doc2中,热链接的内部对象之和为6。
是否有任何方法可以通过一个查询来获得所有文档的计数。
非常感谢,卡兰
发布于 2013-08-12 09:59:57
这可能不是最好的方法,但您可以定义一个javascript变量并总结计数。即;
var hotlinkTotal=0;
db.collection.find().forEach(function(x){hotlinkTotal+=x.hotlinks.length;});
print(hotlinkTotal);发布于 2019-01-11 14:58:23
如果通过聚合框架使用MongoDB 3.6和更新版本,则很有可能。使用聚合管道中的$objectToArray操作符将文档转换为数组。返回数组包含原始文档中每个字段/值对的元素。返回数组中的每个元素都是包含两个字段k和v的文档。
在获取数组时,您可以使用$size操作符,它返回给定数组中的元素数,从而给出每个文档的计数。
要获得所有文档的计数,需要一个$group管道,其中指定_id键为null或一个常量值,用于计算所有输入文档作为一个整体的累积值。
所有这些都可以通过嵌套表达式在一个管道中完成,如下所示:
db.collection.aggregate([
{ "$group": {
"_id": null,
"count": {
"$sum": {
"$size": { "$objectToArray": "$hotlinks" }
}
}
} }
])示例输出
{
"_id" : null,
"count" : 6
}https://stackoverflow.com/questions/18184100
复制相似问题