MongoDB - $ setIsSubset运算符不能与$ match阶段一起使用

时间:2018-06-18 19:04:38

标签: mongodb mongodb-query

我构建了一个这样的查询:

var trigger = 0;
var intervalID = window.setInterval(triggerWatch, 500);

function triggerWatch() {
  if(trigger > 20){
    // Do Stuff Here
  }
}

我想返回所有文件,其中字段'words'的数组包含字符串['hello','you']。

执行此查询时出现此错误:

  

“errmsg”:“未知的顶级操作符:$ setIsSubset”

我做错了什么?

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

如果要在$setIsSubset内使用$match(表达式),则应使用$expr

db.test.aggregate([
    {
        $match: {
            $expr: {
                $setIsSubset: [["hello", "you"], "$words"]}
            }
        }
])

对于低于 3.6 的MongoDB版本,您可以使用$redact

db.test.aggregate([
    {
        $redact: {
            $cond: {
                if: { $eq: [ { $setIsSubset: [["hello", "you"], "$words"]}, true ] },
                then: "$$KEEP",
                else: "$$PRUNE"
            }
        }
    }
])

答案 1 :(得分:1)

这有效:

 db.test.aggregate([{$match: {'words': {'$all': ["hello", "you"] }}}])