2016-11-11 66 views
0

我已经阅读了有关在mongo聚合中使用$let的内容。但所有示例仅在$project阶段使用$let阶段。我想知道$match聚合阶段内是否可以使用$let?下面是一个简单的例子:

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

可以这样做,它可以是''颜色':颜色'什么是确切的目的? – hyades

回答

1

你可以直接使用variables.Node或mongo shell将负责替换字符串的变量。不需要将它们存储为内部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 
     ... 
    ])