在mongodb中使用$和$ match匹配

Man*_*nus 28 match mongodb

我试图在MongoDB中使用以下查询但它没有运行.

db.test.aggergate(
$match: {$and: [type: {$in: ["TOYS"]}, type: {$nin: ["BARBIE"]}, time: 
{$lt:ISODate("2013-12-09T00:00:00Z")}]}})
Run Code Online (Sandbox Code Playgroud)

它表示无效字符":".

可以使用$和$ match吗?我在这个$或者$ match的论坛上看过一个例子,所以我认为这是可能的.

提前感谢您的帮助和指导.

4J4*_*J41 69

$和$ match的工作正常.

您的查询中存在语法错误.试试这个.

db.test.aggregate([
                   { 
                     $match: {
                          $and: [ 
                              {type: {$in: ["TOYS"]}}, 
                              {type: {$nin: ["BARBIE"]}}, 
                              {time: {$lt:ISODate("2013-12-09T00:00:00Z")}}
                          ]
                     }
                   }
                  ])
Run Code Online (Sandbox Code Playgroud)

而对于你想要做的事情,你不需要一个$and.

  • 是的。$and 在这里是多余的。我们用它来回答这个问题:`是否可以将 $and 与 $match 一起使用?` (3认同)
  • 我不认为“$and”在“$match”中完全多余...也许在最简单的情况下...首先我直接在“$match”中尝试了两个单独的“$expr”条件,但没有得到正确的结果...必须添加 `$and` 才能正确组合比较(版本 3.6.2)。 (3认同)
  • 嗨,阿贾伊......感谢您的更正。是的,我发现 $and 不是必需的。感谢大家对我的帮助。 (2认同)
  • 在这种情况下,使用 `$and` 不是多余的吗?至少在 MongoDB 3.2+ 中似乎是这样。 (2认同)

Max*_*ios 6

如果有人想拒绝我的答案,那没关系,这是一个缺乏研究的典型问题

db.test.find( {$and: [ {"type": {$in: ["TOYS"]}}, 
                       {"type": {$nin: ["BARBIE"]}}, 
                       {"time": {$lt:ISODate("2013-12-09T00:00:00Z")}}
                     ]
})
Run Code Online (Sandbox Code Playgroud)

AND与FIND一起使用,接收匹配数组(但它不是匹配指令)聚合框架用于完全不同的东西,就像单词所说的那样,用于聚合(count,sum,avg等值得分组或展开等)

  • 您可以使用$和聚合但不必编写它,并使用不同的过滤器隐式,实际上您可以管道这些过滤器,以防其中一个需要不同的解决方案. (3认同)
  • `$ match`需要`{<query>}`.这意味着,它可以用'$和`就好了. (2认同)

小智 6

{
  $match: {
    $or:[
      {'sender':sender, 'recipient':recipient},
      {'recipient':sender,'sender':recipient}
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

使用 $or