我的mongodb文档结构如下:
{
"_id" : ObjectId("5b58673721b4b95a193d4e91"),
"pageId" : "page1",
"fields" : [
{
"fieldId" : "Field1",
"value" : "test"
},
{
"fieldId" : "Field2",
"value" : 6.0
},
{
"fieldId" : "Field3",
"value" : 8.0
}
]}
}
我想在集合中找到所有文档,其中fieldId为'Field2'的对象的值大于fieldId为'Field3'的对象的值。
即Field2(value)> Field3(value)
字段数组中的对象数不固定。我无法按职位进行比较。我必须按字段ID匹配对象。因此,在这种情况下,它必须位于以下行:
比较:对象值,其中fieldId ='Field2'与
对象值,其中fieldId ='Field3'
如何为此编写MongoDB查询?
我正在使用MongoDB 4.0版
(在某些情况下,文档中可能没有字段。
例如在设计中引入这些字段之前创建的文档)
答案 0 :(得分: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"]}}
}})