我正在尝试在$ 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
我无法理解什么是问题
答案 0 :(得分:0)
不确定你打算在这里做什么,因为你正在做比较,如果'A'在数组中,元素'A'总是正确的。
常规形式的 $match
只取值而不是字段引用。
无需使用$literal
即可直接传递[]。
您可以使用基于mongo版本的以下查询之一。
3.4&下面:
{'$match': {'Segment':{'$in':['A']}}
3.6(您的用例不需要)
{'$match': {'$expr':{'$in':['$Segment', ['A']]}}}