坏值需要mongoDB中的数组

时间:2018-02-08 11:17:20

标签: mongodb mongodb-query aggregation-framework

我正在尝试在$ match的聚合条件中使用$。我有SegmentList作为文字数组和Segment作为文字值。我正在尝试与$条件匹配,如下面的查询。

db.collection.aggregate([
{'$match': {
    'MaterialNumber': '867522'
}}, 
 {'$project':{
    'SegmentList': {'$literal':['A']},
           'Segment':{'$literal':'A'},
           'value':{'$literal':'B'},
       }
   },
       {'$match': {
    'Segment':{'$in':'$SegmentList'}
 }
 }

])

但我收到了错误。

assert: command failed: {
"ok" : 0,
"errmsg" : "bad query: BadValue: $in needs an array",
"code" : 16810
} : aggregate failed

我无法理解什么是问题

1 个答案:

答案 0 :(得分:0)

不确定你打算在这里做什么,因为你正在做比较,如果'A'在数组中,元素'A'总是正确的。

常规形式的

$match只取值而不是字段引用。

无需使用$literal即可直接传递[]。

您可以使用基于mongo版本的以下查询之一。

3.4&下面:

{'$match': {'Segment':{'$in':['A']}}

3.6(您的用例不需要)

{'$match': {'$expr':{'$in':['$Segment', ['A']]}}}