【问题标题】:using $and with $match in mongodb在 mongodb 中使用 $and 和 $match
【发布时间】:2013-12-26 12:12:19
【问题描述】:

我正在尝试在 MongoDB 中使用以下查询,但它不起作用。

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

它说无效字符“:”。

是否可以将 $and 与 $match 一起使用?我在这个论坛上看到了一个 $or 的例子,所以我认为这是可能的。

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

【问题讨论】:

标签: mongodb match


【解决方案1】:

$and 和 $match 可以正常工作。

您的查询中有语法错误。试试这个。

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

对于您想要做的事情,您不需要$and

【讨论】:

  • 嗨 Ajai .....感谢您的更正。是的,我发现 $and 不是必需的。感谢大家帮助我。
  • 在这种情况下使用$and不是多余的吗?至少在 MongoDB 3.2+ 中似乎是这样。
  • 是的。 $and 在这里是多余的。我们有它来回答这个问题:Is it possible to use $and with $match?
  • 我不认为$and$match 中是完全多余的......也许在最简单的情况下......首先我直接在$match 中尝试了两个单独的$expr 条件,但没有得到正确的结果...必须添加 $and 才能正确组合比较(版本 3.6.2)。
  • 如果您按顺序构建匹配表达式并且对同一参数有多个条件,在 $match 表达式中使用 $and 会非常方便。
【解决方案2】:
{
  $match: {
    $or:[
      {'sender':sender, 'recipient':recipient},
      {'recipient':sender,'sender':recipient}
    ]
  }
}

使用$或

【讨论】:

    【解决方案3】:
    db.test.find( {$and: [ {"type": {$in: ["TOYS"]}}, 
                           {"type": {$nin: ["BARBIE"]}}, 
                           {"time": {$lt:ISODate("2013-12-09T00:00:00Z")}}
                         ]
    })
    

    AND 与 FIND 一起使用,接收匹配数组(但它不是匹配指令) 聚合框架用于完全不同的东西,就像这个词所说的那样,用于聚合(计数、总和、平均值等值得分组或展开等)

    【讨论】:

    • 感谢马克西米利亚诺的回答。我使用了聚合,因为我需要在匹配这些记录后按用户 ID 进行分组。很抱歉提供了一个不完整的问题图片。所以我收集 $and 然后聚合是不可能的......
    • 您可以将 $and 与聚合一起使用,但您不必编写它,并且使用不同的过滤器是隐式的,实际上您可以管道这些过滤器以防其中一个需要不同的解决方案。
    • $match 接受{ <query> }。也就是说,$and 就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 2016-04-20
    • 1970-01-01
    • 2022-07-19
    • 2015-06-26
    • 2018-04-28
    • 1970-01-01
    相关资源
    最近更新 更多