使用另一个字段的值查找 MongoDB 对象

sam*_*and 3 mongoose mongodb nosql mongodb-query

最近,我发现很难找到存储在文档中且其密钥位于同一文档的另一个字段中的对象。

{
    list : {
        "red" : 397n8,
        "blue" : j3847,
        "pink" : 8nc48,
        "green" : 983c4,
    },
    result : [
                { "id" : 397n8, value : "anger" },
                { "id" : j3847, value : "water" },
                { "id" : 8nc48, value : "girl" },
                { "id" : 983c4, value : "evil" }
             ]
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取 'blue' 的值,其 id 为 'j3847' 且值为 'water'。

db.docs.find( { result.id : list.blue }, { result.value : 1 } );

# list.blue would return water
# list.pink would return girl
# list.green would return evil
Run Code Online (Sandbox Code Playgroud)

我尝试了很多事情,甚至发现了一篇关于如何使用同一文档中的值更新值的精彩文章:使用我自己基于的另一个字段的值更新 MongoDB 字段;没有成功...:/

如何使用另一个字段的值找到 MongoDB 对象?

Vol*_*kyi 5

您可以使用mongo 聚合中的$filter运算符来完成此操作。它返回一个仅包含符合条件的元素的数组:

db.docs.aggregate([
  {  
    $project: {
      result: {
        $filter: {
          input: "$result", 
          as:"item", 
          cond: { $eq: ["$list.blue", "$$item.id"]}
        }
      }
    }
  }
])
Run Code Online (Sandbox Code Playgroud)

该查询的输出如下所示:

{ 
  "_id" : ObjectId("569415c8299692ceedf86573"), 
  "result" : [ { "id" : "j3847", "value" : "water" } ] 
}
Run Code Online (Sandbox Code Playgroud)