首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mongoDB聚合:按布尔表达式分组

mongoDB聚合:按布尔表达式分组
EN

Stack Overflow用户
提问于 2014-03-14 22:05:51
回答 1查看 1.2K关注 0票数 1

我有一套带有邮政编码的收藏品。我想按城市名称的第一个字母将收集到的所有记录分组,不管是数字还是非数字。我想实现这样的目标:

代码语言:javascript
复制
            {
                    "_id" : true,
                    "n" : 1234567
            },
            {
                    "_id" : false,
                    "n" : 87543
            }

到目前为止,我已经尝试过:

代码语言:javascript
复制
db.zips.aggregate( [
    { $project : { _id : { $substr : ["$city",0,1] } } } ,
    {$group: {_id: {$in: ['0','1','2','3','4','5','6','7','8','9']}}}
] )

但是芒果会抛出错误:

代码语言:javascript
复制
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

如何根据布尔表达式进行分组?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-15 00:32:03

比你想象的简单得多:

代码语言:javascript
复制
db.zips.aggregate([
    { "$group": { 
        "_id": { "$lte": [ { $substr: ["$city", 0, 1] }, "9" ]},
        "n": { "$sum": 1 } 
    }}
])

逻辑$lte运算符对内容进行词汇比较,即一个字符(字节),当然"9“小于"A”。

你能用你现有的方式使用$in吗?不,你不能,因此出错了。它是一个$match操作符,因此可以在管道阶段使用只使用来过滤结果,这不是您想要的。

因此,您需要一个“逻辑”比较,并在词汇上下文中应用合理的运算符。无论您的情况如何,您都需要使用“逻辑”comparison operator

这个的特殊问题中,选择的“比较”是逻辑上的选择。更改为其他操作符以断言不同的“逻辑比较”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22416587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档