我有一个像下面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版 (可能有这样的情况,其中字段可能不存在于文件。例如,文档创建在设计中引入这些字段之前)
假设你总是有两个字段的文档,你可以在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"]}}
}})