【问题标题】:Compare two Int32 fields in MongoDB比较 MongoDB 中的两个 Int32 字段
【发布时间】:2022-01-22 13:16:53
【问题描述】:

您好,我是 MongoDB 的新手,希望有人可以帮助我解决我的问题。我有一个具有以下文档结构的集合:

    // collection: avgsalarydep
{
    "_id" : ObjectId("60509a82f5034f42e0e0f909"),
    "id" : "zufferli-j",
    "firstname" : "Mark",
    "middlename" : "Clemens ",
    "lastname" : "Zufferli",
    "works_in" : "F",
    "salary" : 50000,
    "email_address" : "addad@enron.com",
    "avgjoin" : [
        {
            "_id" : "F",
            "averagesalary" : 64833
        }
    ]
}

现在我只想编写一个查找查询,显示所有工资低于平均工资的人。例如,我尝试了以下操作:

.find({$expr:{$lt:["$salary", "$avgjoin.averagesalary"]}})
.find({$expr:{$lt:["$salary", "avgjoin.averagesalary"]}})
{$match:{ $expr: { $lt: { "$salary" , "$avgjoin.averagesalary" } }} }

但要么它只是返回所有的人(忽略他们是否赚得更少),要么说“没有找到记录”。我究竟做错了什么?如果您需要更多说明,请随时询问。非常感谢您的帮助。

【问题讨论】:

    标签: mongodb nosql compare


    【解决方案1】:

    这样的工作:

    db.avgsalarydep.find({
      $expr: {
        $lt: [
          "$salary",
          {
            $min: "$avgjoin.averagesalary"
          }
        ]
      }
    })
    

    Working Mongo playground

    我使用了$min 聚合运算符,以防avgjoin 数组中可能有多个文档。

    我注意到在您的示例文档中,avgjoin 中只有一个元素,它与您文档的 works_in 字段具有相同的 _id。如果总是这样,更新文档以便有一个等同于avgjoin.averagesalary 的字段将允许您最初尝试的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多