如何比较MongoDB的对象数组不同对象的属性

问题描述 投票:2回答:1

我有一个像下面MongoDB的文档结构:

{
"_id" : ObjectId("5b58673721b4b95a193d4e91"),
"pageId" : "page1",
"fields" : [ 
    {
        "fieldId" : "Field1",
        "value" : "test"
    }, 
    {
        "fieldId" : "Field2",
        "value" : 6.0
    },
    {
        "fieldId" : "Field3",
        "value" : 8.0
    }
]}

}

我想找到的集合,其中具有fieldId为“字段2”对象的值比有fieldId为“字段3”的对象值中的所有文档。

即字段2(值)>字段3(值)

物体的领域的阵列的数目是不固定的。我不能比较的位置。我必须匹配字段Id的对象。所以,在这种情况下,就必须要对的线路: 比较:对象值,其中fieldId =“字段2”与对象值,其中fieldId =“字段3”

我怎样写这个MongoDB的查询?

我使用MongoDB的4.0版 (可能有这样的情况,其中字段可能不存在于文件。例如,文档创建在设计中引入这些字段之前)

mongodb mongodb-query aggregation-framework
1个回答
1
投票

假设你总是有两个字段的文档,你可以在3.6使用下面的查询。

定位使用indexofarray与fieldId作为搜索标准之后是值比较字段的文档。

db.collectionname.find(
{"$expr":{
  "$let":{
    "vars":{
      "field2":{"$arrayElemAt":["$fields",{"$indexOfArray":["$fields.fieldId","Field2"]}]},
      "field3":{"$arrayElemAt":["$fields",{"$indexOfArray":["$fields.fieldId","Field3"]}]}
    },
    "in":{"$gt":["$$field2.value","$$field3.value"]}}
}})
© www.soinside.com 2019 - 2024. All rights reserved.