我有一个文档结构{'text': 'here is text', 'count' : 13, 'somefield': value}
集合有几千条记录,text
键值可能重复多次,我想找到具有最高计数值的不同文本,同时应该返回整个文档,我能够对它们进行排序按降序排列。
distinct
会在列表中返回唯一值。
我想要使用所有三个函数和文件必须返回,我还在学习并且没有覆盖mapreduce。
答案 0 :(得分:4)
您能否详细说明您想做什么?是否要返回具有最高“计数”值的唯一“文本”值的文档?
例如,给定集合:
> db.text.find({}, {_id:0})
{ "text" : "here is text", "count" : 13, "somefield" : "value" }
{ "text" : "here is text", "count" : 12, "somefield" : "value" }
{ "text" : "here is text", "count" : 10, "somefield" : "value" }
{ "text" : "other text", "count" : 4, "somefield" : "value" }
{ "text" : "other text", "count" : 3, "somefield" : "value" }
{ "text" : "other text", "count" : 2, "somefield" : "value" }
>
(I have omitted _id values for brevity)
您是否只想返回包含具有最高'count'值的唯一文本的文档?
{ "text" : "here is text", "count" : 13, "somefield" : "value" }
和
{ "text" : "other text", "count" : 4, "somefield" : "value" }
实现此目的的一种方法是使用新聚合框架中的$ group和$ max函数。有关$ group的文档可在此处找到: http://docs.mongodb.org/manual/aggregation/
> db.text.aggregate({$group : {_id:"$text", "maxCount":{$max:"$count"}}})
{
"result" : [
{
"_id" : "other text",
"maxCount" : 4
},
{
"_id" : "here is text",
"maxCount" : 13
}
],
"ok" : 1
}
如您所见,上述内容并未返回原始文件。如果需要原始文档,则可以进行查询以找到与唯一文本和计数值匹配的文档。
作为替代方法,您可以先运行'distinct'命令返回所有不同值的数组,然后使用sort和limit对每个值运行查询,以返回具有最高值'count'的文档。 sort()和limit()方法在“高级查询”文档的“光标方法”部分中进行了说明: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-CursorMethods
> var values = db.runCommand({distinct:"text", key:"text"}).values
> values
[ "here is text", "other text" ]
> for(v in values){var c = db.text.find({"text":values[v]}).sort({count:-1}).limit(1); c.forEach(printjson);}
{
"_id" : ObjectId("4f7b50b2df77a5e0fd4ccbf1"),
"text" : "here is text",
"count" : 13,
"somefield" : "value"
}
{
"_id" : ObjectId("4f7b50b2df77a5e0fd4ccbf4"),
"text" : "other text",
"count" : 4,
"somefield" : "value"
}
目前还不清楚这是否正是你想要做的,但我希望它至少会给你一些入门的想法。如果我误解了,请更详细地解释您想要执行的确切操作,并希望我或社区的其他成员能够帮助您。谢谢。