2017-11-13 9 views
0

による凝集体:フィルター、私は次のクエリを実行した文字列の長さ

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"をフィルタリングするフィルタに相当するものを探しています。

試してみてください:

db.collection.aggregate([ 
    //previous aggregations 
    { 
     "$redact": { 
      "$cond": [ 
       { "$gt": [ { "$strLenCP": "$_id.conso" }, 2] }, 
       "$$KEEP", 
       "$$PRUNE" 
      ] 
     } 
    } 
]) 
+0

[編集]リンクを使用して、 'Indiv2'コレクションのサンプル文書と期待される出力を表示できますか? – chridam

答えて

1

は、ここでは役に立つかもしれません$redact演算子があります。

// previous pipeline here, then: 
{$addFields: {slen: {$strLenBytes: "$_id.conso"}}} 
,{$match: {$or: [ {"_id.conso": {$ne: "x"}}, {slen: {$gt: 1}} ] }} 
0

あなただけconso長さとフィルタを取り込むことができ

関連する問題