首页 > 解决方案 > 如何在mongodb中检索嵌套数组的单个元素?

问题描述

假设我的 mongodb 中有这样的文件:

{
    id: 1,
    names: [
        {
            id: 2,
            first: [
                {
                    id: 3,
                    name: "alice",
                },
                {
                    id: 4,
                    name: "bob",
                }, 
            ]
        },
        {
            id: 5,
            first: [
                {
                    id: 6,
                    name: "berhe",
                },
                {
                    id: 7,
                    name: "belay",
                }, 
            ]
       }
    ]
}
{
    id: 8,
    names: [
        {
            id: 9,
            first: [
                {
                    id: 10,
                    name: "gemechu",
                },
                {
                    id: 11,
                    name: "samy",
                }, 
            ]
        },
        {
            id: 12,
            first: [
                {
                    id: 13,
                    name: "helen",
                },
                {
                    id: 14,
                    name: "natu",
                }, 
            ]
        }
    ]
}

现在如何检索一个值

id=8, 
names.id = 9, 
names.first.id=10 

就像这样:

{
    id:10,
    name:"gemechu"
} 

标签: mongodb

解决方案


  • $match使用所有条件过滤文档$elemMatch
  • $unwind解构names数组
  • $match命名id条件
  • $unwind解构first数组
  • $match第一个id条件
  • $project格式化结果
db.collection.aggregate([
  {
    $match: {
      id: 8,
      names: {
        $elemMatch: {
          id: 9,
          "first.id": 10
        }
      }
    }
  },
  { $unwind: "$names" },
  { $match: { "names.id": 9 } },
  { $unwind: "$names.first" },
  { $match: { "names.first.id": 10 } },
  {
    $project: {
      id: "$names.first.id",
      name: "$names.first.name"
    }
  }
])

操场


推荐阅读