我有一套带有邮政编码的收藏品。我想按城市名称的第一个字母将收集到的所有记录分组,不管是数字还是非数字。我想实现这样的目标:
{
"_id" : true,
"n" : 1234567
},
{
"_id" : false,
"n" : 87543
}到目前为止,我已经尝试过:
db.zips.aggregate( [
{ $project : { _id : { $substr : ["$city",0,1] } } } ,
{$group: {_id: {$in: ['0','1','2','3','4','5','6','7','8','9']}}}
] )但是芒果会抛出错误:
Fri Mar 14 23:01:52.566 aggregate failed: { "errmsg" : "exception: invalid operator '$in'", "code" : 15999, "ok" : 0 } at src/mongo/shell/collection.js:898如何根据布尔表达式进行分组?
发布于 2014-03-15 00:32:03
比你想象的简单得多:
db.zips.aggregate([
{ "$group": {
"_id": { "$lte": [ { $substr: ["$city", 0, 1] }, "9" ]},
"n": { "$sum": 1 }
}}
])逻辑$lte运算符对内容进行词汇比较,即一个字符(字节),当然"9“小于"A”。
你能用你现有的方式使用$in吗?不,你不能,因此出错了。它是一个$match操作符,因此可以在管道阶段使用只使用来过滤结果,这不是您想要的。
因此,您需要一个“逻辑”比较,并在词汇上下文中应用合理的运算符。无论您的情况如何,您都需要使用“逻辑”comparison operator。
在这个的特殊问题中,选择的“比较”是逻辑上的选择。更改为其他操作符以断言不同的“逻辑比较”。
https://stackoverflow.com/questions/22416587
复制相似问题