我有如下的 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(值) > Field3(值)
fields 数组中的对象数量不固定。我无法按位置进行比较。我必须按字段 ID 匹配对象。所以,在这种情况下,它必须在以下行中:
比较:对象值 where fieldId='Field2' 与
对象值 where fieldId='Field3'
如何为此编写 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"]}}
}})
关于mongodb - 如何比较mongodb对象数组中不同对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54515966/