我是MongoDB的新手,到目前为止,它似乎试图摆脱它让简单的事情变得过于复杂。
我正在尝试运行以下MYSQL等效项
SELECT userid, COUNT(*)
FROM userinfo
WHERE userdata like '%PC% or userdata like '%wire%'
GROUP BY userid
我有mongo 3.0.4版,我正在运行MongoChef。 我尝试使用类似下面的内容:
db.userinfo.group({
"key": {
"userid": true
},
"initial": {
"countstar": 0
},
"reduce": function(obj, prev) {
prev.countstar++;
},
"cond": {
"$or": [{
"userdata": /PC/
}, {
"userdata": /wire/
}]
}
});
但是那不喜欢OR。 当我拿出OR时,我想我会一次做一半并将结果合并到excel中,我得到一个错误" group()无法处理超过20000个唯一键"和结果表应该比那个大得多。
从我在网上可以看出,我可以使用聚合管道来做到这一点,但我找不到任何明确的例子来说明这一点。
这似乎应该是一个简单的东西应该内置到任何数据库中,对我来说没有意义。 非常感谢任何帮助。
答案 0 :(得分:3)
/
作品" sooo"使用.aggregate()
方法要好得多,因为.group()
是一种过时的方法:
db.userinfo.aggregate([
{ "$match": {
"userdata": { "$in":[/PC/,/wire/] }
}},
{ "$group": {
"_id": "$userid",
"count": { "$sum": 1 }
}}
])
这是本机代码,而不是JavaScript转换,因此运行速度更快。
答案 1 :(得分:0)
这里是一个示例,它计算last_name值为“ smith”的记录的first_name值的不同数量:
db.collection.distinct(“ first_name”,{“ last_name”:“ smith”})。length;
输出 3