我有一个集合T
,有两个字段:Grade1
和Grade2
,我想选择条件为Grade1>的字段; Grade2
,我怎样才能像在MySQL中一样获得查询?
Select * from T Where Grade1 > Grade2
如果查询仅由$where
运算符组成,则可以只传入JavaScript表达式:
db.T.find("this.Grade1 > this.Grade2");
为了获得更高的性能,请运行一个具有$redact
管道的聚合操作,以筛选满足给定条件的文档。
$redact
管道合并了$project
和$match
的功能,以实现字段级编辑,在此管道中,它将使用$$keep
返回所有匹配条件的文档,并使用$$prune
变量从管道结果中删除那些不匹配的文档。
运行以下聚合操作比对大型集合使用$Where
更有效地筛选文档,因为它使用单个管道和本机MongoDB运算符,而不是使用$Where
的JavaScript计算,后者会降低查询速度:
db.T.aggregate([
{
"$redact": {
"$cond": [
{ "$gt": [ "$Grade1", "$Grade2" ] },
"$$KEEP",
"$$PRUNE"
]
}
}
])
这是合并两个管道$project
和$match
的更简化版本:
db.T.aggregate([
{
"$project": {
"isGrade1Greater": { "$cmp": [ "$Grade1", "$Grade2" ] },
"Grade1": 1,
"Grade2": 1,
"OtherFields": 1,
...
}
},
{ "$match": { "isGrade1Greater": 1 } }
])
对于MongoDB3.4及更新版本:
db.T.aggregate([
{
"$addFields": {
"isGrade1Greater": { "$cmp": [ "$Grade1", "$Grade2" ] }
}
},
{ "$match": { "isGrade1Greater": 1 } }
])
您可以使用$expr(3.6mongo版本运算符)在常规查询中使用聚合函数。
比较查询运算符
与聚合比较运算符
。
常规查询:
db.T.find({$expr:{$gt:["$Grade1", "$Grade2"]}})
聚合查询:
db.T.aggregate({$match:{$expr:{$gt:["$Grade1", "$Grade2"]}}})
您可以使用$WHERE。 请注意,它将相当慢(必须对每个记录执行Javascript代码),因此如果可以,请与索引查询结合使用。
db.T.find( { $where: function() { return this.Grade1 > this.Grade2 } } );
或更紧凑:
db.T.find( { $where : "this.Grade1 > this.Grade2" } );
您可以使用$expr
,如最近回答中所述
我知道可以使用,现在不推荐使用。类似于咆哮的代码: 另外,也许可以将手动脚本写成字符串,但我怀疑这是否是正确的解决方案。任何创建正确查询的想法都将受到欢迎。
问题内容: 我的Firestore集合的文档带有字符串字段,该字段可以为 null 。 我期望如果我查询: 我将获取“ producedDate”早于“ 2018-10-15”的所有产品,包括那些“ producedDate”为空的产品。 但是实际上我没有得到s。 这是故意的还是一个错误? 问题答案: 它打算以这种方式工作。该文档指出: 当查询涉及具有 混合类型值的 字段时,Cloud Fires
问题内容: 在我的收藏夹中,每个文档都有2个修改和同步的日期。我想查找已修改>同步,或不存在同步的内容。 我试过了 但没有显示我的期望。有任何想法吗? 谢谢 问题答案: 您不能将一个字段与具有正常查询匹配的另一个字段的值进行比较。但是,您可以使用聚合框架执行此操作: 我在其中输入“您的其他常规查询”,因为您可以使该位使用索引。因此,如果您只想对该字段所在的文档执行此操作,则可以执行以下操作: 用输
本文向大家介绍根据两个条件更新MongoDB中指定字段的查询,包括了根据两个条件更新MongoDB中指定字段的查询的使用技巧和注意事项,需要的朋友参考一下 为此,请使用UPDATE()方法,并在其中设置两个条件。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出; 以下是根据两个条件更新MongoDB中数量的查询- 在find()方法的帮助下显示集合
我正在通过猫鼬使用MongoDB。 > MongoDB是执行集合扫描还是索引有助于提高查询效率?查询是否与仅使用id字段有任何不同? 如果MongoDB在您查询非索引字段时进行集合扫描。如果集合扫描完全相同,查询多个非索引字段是否会加快查询速度?假设我查询五个非索引字段而不是两个(都返回相同的文档)。两个查询是否都进行相同的集合扫描?
问题内容: 我有要查询的模型(称为“活动”)(使用Mongoose)。他们的架构如下所示: 当我询问他们,我填充,,,和字段(所有引用)。在那之后,我也深入了这个领域。这是我的查询代码: 这已经是一个相对复杂的查询,但是我需要做更多。如果它碰到了声明的一部分,我 还 需要确保的字段等于字符串。我尝试使用,但是由于必须先填充事件,因此无法查询其任何字段。我还需要在其他多个查询中实现相同的目标。 如我
问题内容: 我想知道如何比较两个不同的数据库 表记录 。我的意思是,我将比较两个数据库表,它们可能具有不同的列名但具有相同的数据。但是其中一个表可能比另一个表具有更多的记录,因此我想看看这两个表之间的区别是什么。为此,如何编写sql查询?仅供参考:这两个数据库都在同一个SQL Server实例下。 然后,在比较表1和表2之后,它应该 从 表2返回 Ruby Core。 问题答案: 如果执行从T1到
问题内容: 我一直认为您可以在语句中使用它来查询MySQL中的内容。因此,如果我想将一行中的多个字段与1个关键字或字词进行比较: 如果我有一系列要比较的单词: 我不相信语法是正确的。除了类似的东西,是否有一种有效的方法可以编写此代码: 我能正确处理吗? 问题答案: 用这个::