在 mongodb 中使用 $and 和 $match

Posted

技术标签:

【中文标题】在 mongodb 中使用 $and 和 $match【英文标题】:using $and with $match in mongodb 【发布时间】: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 的例子,所以我认为这是可能的。

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

【问题讨论】:

文档在这里:docs.mongodb.org/manual/reference/operator/aggregation/match 感谢您的回复。我认为我不需要使用 $and,因为它隐含在查询中? 这是一个无需聚合框架即可完美运行的查询,请使用常规查找 我同意马克西米利亚诺里奥斯的观点,请阅读docs.mongodb.org/manual/reference/method/db.collection.find 为什么建议他使用其他东西,而不是帮助他解决问题?也许我们看到的只是他全部集合的一小部分? 【参考方案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 就可以了。

以上是关于在 mongodb 中使用 $and 和 $match的主要内容,如果未能解决你的问题,请参考以下文章

Convert between cv::Mat and QImage 两种图片类转换

MongoDB 使用 $and 和切片和匹配

如何在 cv::Mat 上应用 bitwise_and?

Java中mongodb使用and和or的复合查询

在 MongoDB 中使用 $and 的多个 $regex

使用 openCV(.release() 和 =Mat() 释放 Mat 图像不起作用)