繁体   English   中英

如何在MongoDb中执行不区分大小写的聚合分组?

[英]How to perform case-insensitive aggregation grouping in MongoDb?

假设我想通过Description字段按MongoDb中的文档进行聚合和分组。

运行以下命令(默认情况下区分大小写):

db['Products'].aggregate(
    { $group: { 
        _id: { 'Description': "$Description" },
        count: { $sum: 1 },
        docs: { $push: "$_id" }
    }},
    { $match: {
        count: { $gt : 1 }
    }}
);

在我的样本数据上给我1000个结果,这很好。

但是现在我希望运行不区分大小写的查询(使用$toLower )应该给我小于或等于1000的结果:

db['Products'].aggregate(
    { $group: { 
        _id: { 'Description': {$toLower: "$Description"} },
        count: { $sum: 1 },
        docs: { $push: "$_id" }
    }},
    { $match: {
        count: { $gt : 1 }
    }}
);

但相反,我获得了超过1000个结果。 那可能不对,可以吗? 更常见的条目应该组合在一起,以产生更少的总分组...我想。

那么可能我的聚合查询错了! 这让我想到了我的问题:

如何在MongoDb中执行不区分大小写的聚合分组?

你接近不区分大小写的分组是正确的,所以也许你的观察不是吗? ;)

试试这个例子:

// insert two documents
db.getCollection('test').insertOne({"name" : "Test"}) // uppercase 'T'
db.getCollection('test').insertOne({"name" : "test"}) // lowercase 't'

// perform the grouping
db.getCollection('test').aggregate({ $group: { "_id": { $toLower: "$name" }, "count": { $sum: 1 } } }) // case insensitive
db.getCollection('test').aggregate({ $group: { "_id": "$name", "count": { $sum: 1 } } }) // case sensitive

你可能在某个地方有拼写错误?

文件还说明了这一点

$ toLower仅对ASCII字符串具有明确定义的行为。

也许那就是你在这里咬什么?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM