Mongodb 按字符串长度筛选聚合
我已执行以下查询:Mongodb 按字符串长度筛选聚合,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我已执行以下查询: db.Indiv2.aggregate( {$unwind: '$conso'}, {$group: {_id: {conso:'$conso.nom_commercial', region:"$region"}, sum: {$sum: 1}}}, {$sort : {sum : -1}}, {$group: { _id: "$_id.region", "conso": { $first: "$_id.conso" }, "sum": { $first:
db.Indiv2.aggregate(
{$unwind: '$conso'},
{$group: {_id: {conso:'$conso.nom_commercial', region:"$region"}, sum:
{$sum: 1}}},
{$sort : {sum : -1}},
{$group: {
_id: "$_id.region",
"conso": {
$first: "$_id.conso"
},
"sum": {
$first: "$sum"
},
}},
{$sort : {_id : 1}}
);
以以下格式返回按区域划分的最高消费食品:
{
"_id" : {
"conso" : "x",
"region" : 1
},
"sum" : 73226.0
},
{
"_id" : {
"conso" : "x",
"region" : 8
},
"sum" : 25683.0
},
{
"_id" : {
"conso" : "grandlait demi �cr�m� uht",
"region" : 1
},
"sum" : 251.0
}
然而,很多食物都没有名字。这些项目被命名为“x”(上面的例子)。我想筛选我的查询以排除这些项目。我正在寻找一个过滤器的等价物,它可以过滤长度小于2个字符的字符串或过滤字符串“x”。这里有一个运算符可能会有所帮助:
尝试:
您可以只捕获
conso
长度和过滤器。鉴于上述or条件,我们最终得出以下结论:
// previous pipeline here, then:
{$addFields: {slen: {$strLenBytes: "$_id.conso"}}}
,{$match: {$or: [ {"_id.conso": {$ne: "x"}}, {slen: {$gt: 1}} ] }}
您能否使用该链接显示Indiv2
集合中的一些示例文档以及您的预期输出?
// previous pipeline here, then:
{$addFields: {slen: {$strLenBytes: "$_id.conso"}}}
,{$match: {$or: [ {"_id.conso": {$ne: "x"}}, {slen: {$gt: 1}} ] }}