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文档:

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

相关内容

  • 没有找到相关文章

最新更新