gpt4 book ai didi

javascript - Pymongo 使用 MapReduce 对存在字段的所有文档进行计数

转载 作者:行者123 更新时间:2023-11-28 02:37:38 24 4
gpt4 key购买 nike

我正在尝试使用 Map+Reduce 计算存在某个字段(在本例中为“国家/地区”字段)的所有文档,唯一对我有用的解决方案是:

mapper = Code("""
function () {
if (typeof this.country != 'undefined') {
var key = 1
emit(key, {count: 1})
};
};
""")

我对键并不真正感兴趣,只要字段存在,所以我只传递了1。但我确信这是错误的。

reducer = Code("""
function (key, values) {
var sum = 0;
values.forEach(function (value) {
sum += value['count'];
});
return {count: sum};
};
""")

然后调用map_reduce:

results = dbHandle.cards.map_reduce(mapReduce.mapper, mapReduce.reducer, "resultsMR")
for doc in results.find():
print "Found %s documents." % int(doc.get('value').get('count'))

另外,我正在考虑如何获取创建日期大于其他日期的文档数量,我应该在 map_reduce 函数中使用“查询”选项吗?

query = {"foundationDate":{"$gt":datetime.datetime(2012, 1, 1, 00, 00, 00)}}

谢谢:)

最佳答案

根据Chien-Wei Huang评论,为什么不使用内置功能,例如

db.somName.find({"country":{"$exists":True}}).count() 

否则,如果您想要一些标记映射减少代码,您只需通过 group() 函数模仿计数功能即可,例如

db.somName.group(
{ cond: { "country" : {$exists : true} }
, key: { }
, initial: {count : 0}
, reduce: function(doc, out){ out.count++}
}
);

注意:如果您还想要按国家/地区值进行计数,请将以下内容粘贴到键中: , 键 { "国家": 1 }

关于javascript - Pymongo 使用 MapReduce 对存在字段的所有文档进行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13217436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com