gpt4 book ai didi

node.js - 获取 MongoDB 文档中嵌入式集合的计数

转载 作者:可可西里 更新时间:2023-11-01 09:59:43 26 4
gpt4 key购买 nike

我正在使用 MongoDB 和 10Gen node.js 驱动程序。

我在 MongoDB 中有一个集合,其中包含与此类似的文档:

{
_id: ObjectId( "500310affdc47af710000001" ),
name:'something',
tags:['apple','fruit','red'],
created: Date( 1342378221351 )
}

我想得到的是查看所有文档并获得集合中所有文档的所有标签的不同计数。我尝试了群组功能并得到了这个:

> db.photos.group(
... {cond:{}
... ,key:{tags:true}
... ,initial:{count:0}
... ,reduce:function(doc,out){out.count++}
... ,finalize:function(out){}});
[
{
"tags" : null,
"count" : 35
},
{
"tags" : [
"#strawberry",
"#friutpicture"
],
"count" : 1
}
]

这是不对的。我可以在没有这样的计数的情况下得到不同的:

> db.photos.distinct('tags')
[
"#friutpicture",
"#strawberry",
"#factory",
"#wallpaper",
"#bummber",
"#test",
"#fire",
"#watermark"
]

但我需要计数。

最佳答案

您可以在新的聚合框架 (2.1+) 中使用以下内容:

> db.photos..aggregate([{$unwind:"$tags"},
{$group:{_id:"$tags"}},
{$group:{_id:"DistictCount",count:{$sum:1}}}])

您的结果将是:

{
"result" : [
{
"_id" : "DistictCount",
"count" : 8
}
],
"ok" : 1
}

group 函数不会执行您需要的操作,因为您需要先“展开”标签数组,然后才能对其进行分组,这意味着您需要一个 map 函数来发出文档中的每个标签,以及一个 reduce .如果您卡在 2.0 或更早版本并且无法使用聚合框架,则可以使用 map/reduce。这是 an example这可能会有所帮助。

关于node.js - 获取 MongoDB 文档中嵌入式集合的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11495060/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com