Node.js 获取MongoDB文档中嵌入集合的计数
我正在使用MongoDB和10Gen node.js驱动程序 我在MongoDB中有一个集合,其中包含类似以下内容的文档:Node.js 获取MongoDB文档中嵌入集合的计数,node.js,mongodb,Node.js,Mongodb,我正在使用MongoDB和10Gen node.js驱动程序 我在MongoDB中有一个集合,其中包含类似以下内容的文档: { _id: ObjectId( "500310affdc47af710000001" ), name:'something', tags:['apple','fruit','red'], created: Date( 1342378221351 ) } 我想得到的是查看所有文档,并获得集合中所有文档中所有标记的不同计数。我尝试了组函数,得到了以下结果: >
{
_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+)中使用以下内容: 您的结果将是:
{
"result" : [
{
"_id" : "DistictCount",
"count" : 8
}
],
"ok" : 1
}
group函数不能满足您的需要,因为您需要先“展开”标记数组,然后才能对其进行分组,这意味着您需要一个映射函数,该函数可以发出文档中的每个标记,以及一个reduce。如果您停留在2.0或更早版本,并且无法使用聚合框架,那么可以使用map/reduce。这可能会有所帮助。我被困在2.0.6中。我按照链接找到了这个食谱:这正是我需要的,谢谢!
{
"result" : [
{
"_id" : "DistictCount",
"count" : 8
}
],
"ok" : 1
}