是否可以限制输入文档,而不是数字,而是来自索引键的映射。像:
{_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 doc:
限制号可选。指定的最大文档数 输入到地图功能。
有没有办法在没有先映射所有密钥的情况下执行此操作,然后在第二个查询中使用最后两个?
答案 0 :(得分:1)
要将mapReduce的输入限制为两个不同的键,即使所有文档与前两个键(即5和6)匹配,您可以在mapReduce命令中添加一个查询字段,以便仅选择具有键的文档5或6如下:
db.collection.mapReduce(
mapFunction,
reduceFunction,
{
"query": {
"key": { "$in": [5, 6] }
}
}
)
- 编辑 -
要获得前两个键,您可以使用 distinct()
方法,该方法从集合中的所有文档返回字段key
的不同值,并使用JavaScript < strong> splice()
方法从数组中返回前两个键:
var keys = db.test.distinct("key").slice(0, 2);
db.collection.mapReduce(
mapFunction,
reduceFunction,
{
"query": {
"key": { "$in": keys }
}
}
)