是否可以限制输入文档,而不是限制它们的数量,而是限制索引键的映射。类似:
{_id: 1, key: 5, smthFresh: "Cool"}
{_id: 2, key: 5, smthFresh: "Cool"}
{_id: 3, key: 5, smthFresh: "Cool"}
{_id: 4, key: 6, smthFresh: "Cool"}
{_id: 5, key: 6, smthFresh: "Cool"}
{_id: 6, key: 7, smthFresh: "Cool"}
现在我想将mapReduce的输入限制为两个不同的键。就像拥有匹配前两个键(即5和6)的所有文档一样。这将返回5份文件,而不是前2份。
关于mapreduce限制的MongoDB文档:
limit number可选。为输入到映射函数。
有没有一种方法可以做到这一点,而不需要首先映射所有键,然后在第二个查询中使用最后两个键?
要将mapReduce的输入限制为两个不同的键,即具有与前两个键(即5和6)匹配的所有文档,您可以在mapReduce命令中添加一个查询字段,以仅选择那些键为5或6的文档,如下所示:
db.collection.mapReduce(
mapFunction,
reduceFunction,
{
"query": {
"key": { "$in": [5, 6] }
}
}
)
--编辑--
要获得前两个键,可以使用distinct()
方法返回集合中所有文档中字段key
的不同值,并使用JavaScriptsplice()
法返回数组中的前两个密钥:
var keys = db.test.distinct("key").slice(0, 2);
db.collection.mapReduce(
mapFunction,
reduceFunction,
{
"query": {
"key": { "$in": keys }
}
}
)