在 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的主要内容,如果未能解决你的问题,请参考以下文章