MongoDB限制mapReduce对索引键的影响

时间:2015-06-24 14:17:39

标签: mongodb mapreduce

是否可以限制输入文档,而不是数字,而是来自索引键的映射。像:

{_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:

  

限制号可选。指定的最大文档数   输入到地图功能。

有没有办法在没有先映射所有密钥的情况下执行此操作,然后在第二个查询中使用最后两个?

1 个答案:

答案 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 }
        }
    }
)