pul*_*hal 6 mongodb aggregation-framework
假设我想按Description字段聚合和分组 MongoDb 中的文档。
运行以下(默认区分大小写):
db['Products'].aggregate(
{ $group: {
_id: { 'Description': "$Description" },
count: { $sum: 1 },
docs: { $push: "$_id" }
}},
{ $match: {
count: { $gt : 1 }
}}
);
Run Code Online (Sandbox Code Playgroud)
在我的样本数据上给了我 1000 个结果,这很好。
但现在我希望运行不区分大小写的查询(使用$toLower)应该给我少于或等于 1000 个结果:
db['Products'].aggregate(
{ $group: {
_id: { 'Description': {$toLower: "$Description"} },
count: { $sum: 1 },
docs: { $push: "$_id" }
}},
{ $match: {
count: { $gt : 1 }
}}
);
Run Code Online (Sandbox Code Playgroud)
但相反,我得到了 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
Run Code Online (Sandbox Code Playgroud)
您可能在某处打错了字?
该文件还指出
$toLower 仅对 ASCII 字符字符串具有明确定义的行为。
也许这就是你在这里咬人的原因?
| 归档时间: |
|
| 查看次数: |
6218 次 |
| 最近记录: |