2016-11-11 6 views
0

私は$letをmongoアグリゲーションで使用しています。しかし、すべての例では$let$projectステージ内にのみ使用されています。私は$letの中に$match凝集の段階を使用することができるのだろうか?ここでは簡単な例です:

var Color = "Black"; 

db.mydata.aggregate([ 
    { "$match": {  
     "Category": "MyCategory", 
     "Location":"London", 
     "Color": $let: { 
        vars: { 
        "Color": Color 
        }, 
        in: { 
        "$$Color" 
        } 
       } 
}},  
    // other stages as group, project and sort 
    ... 
]) 

以上、約Expected expression...を文句を言うだから、集計の$let$match内部または他のステージを使用するには、いくつかの方法で可能ですか?

としてうまく機能しません

EDIT:

var Color = "Black"; 

db.mydata.aggregate([ 
    { "$match": {  
     "Category": "MyCategory", 
     "Location":"London", 
     "Color": "$$Color" 
}},  
    // other stages as group, project and sort 
    ... 
]) 

しかしhttps://docs.mongodb.com/v3.2/reference/aggregation-variables/それが必要に応じて? よろしくお願いします。

+0

目的は何だとモンゴで実行されますか? – hyades

+0

@hyades集約の外にユーザー定義変数を使用して集約クエリを動的に作成する。 – user1665355

+0

これは、ここで "Color":Color "とすることができます。正確な目的は何ですか? – hyades

答えて

1

変数をすぐに使用することはできます。ノードまたはmongoシェルは変数を文字列に置き換えて処理します。それらを内部のmongo変数または集約変数として格納する必要はありません。

var Color = "Black"; 

db.mydata.aggregate([ 
    { "$match": {  
     "Category": "MyCategory", 
     "Location":"London", 
     "Color": Color // this would be replaced by string "Black" by node 
}},  
    // other stages as group, project and sort 
    ... 
]) 

このクエリは、

db.mydata.aggregate([ 
     { "$match": {  
      "Category": "MyCategory", 
      "Location":"London", 
      "Color": "Black" 
    }},  
     // other stages as group, project and sort 
     ... 
    ]) 
関連する問題