比较 MongoDB 中的两个 Int32 字段

Compare two Int32 fields in MongoDB

你好,我是 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" } }} }

但它要么只是 returns 所有人(如果他们赚得少就忽略),要么说“找不到记录”。我究竟做错了什么?如果您需要更多说明,请随时询问。将不胜感激。

像这样的东西有效:

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

Working Mongo playground

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

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