【问题标题】:How to compare two fields from the same document for equality in MongoDB? [duplicate]如何在 MongoDB 中比较同一文档中的两个字段是否相等? [复制]
【发布时间】:2014-10-27 10:56:27
【问题描述】:

我有一个带有以下“模式”的 MongoDB 文档集合:

{
  field1: value1,
  field2: value2
}

我想在管道中运行带有“$match”的查询,以检查 field1 和 field2 值的相等性。

类似于“field1”==“field2”。

我该怎么做?

谢谢大家!

【问题讨论】:

    标签: c# mongodb mongodb-query


    【解决方案1】:
    db.c.aggregate([{
        $project : {
            equal : {
                $eq : ["$field1", "$field2"]  // to judge like your :  "valueof(field1) == valueof(field2)"
            },
            doc : "$$ROOT"   // store the whole document, this is optional
        }
    }, {
        $match : {
            equal : true   // filter to get documents only satisfy : "valueof(field1) == valueof(field2)"
        }
    }]);
    

    【讨论】:

    • @i 惊动了外星人,也许我认为这就够了是错误的。谢谢提醒。
    • 谢谢!它起作用了..但是'doc:“$$ROOT”'是什么意思?
    • @Efstathios Chatzikyriakidis:它代表上一阶段的当前文档。例如,如果您的集合中有一个文档 {_id:1, a:1, b:2},则 doc:"$$ROOT" 将生成一个字段为 {doc : {_id:1, a:1, b:2}}。它是可选的,因为我在代码块中注释,我之所以这样做是因为我不确定您最后要投影哪些字段,所以我投影了整个文档。
    【解决方案2】:

    你需要做这样的事情:

    db.collection.aggregate([{$match:{field1:value1 , field2:value1}}])
    

    【讨论】:

    • 我想做类似“valueof(field1) == valueof(field2)”的事情。
    • 两个字段的数据类型相同?
    • OP 希望在每个文档中比较 field1field2,而不是将它们与相同的值进行比较。
    猜你喜欢
    • 2013-06-27
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2015-11-15
    • 2014-09-20
    相关资源
    最近更新 更多