数据库查询以过滤对象数组中的数据

Database query to filter data inside an object array

我的 mongodb 中有一堆以下格式的文档,我正在使用 moongoose 作为 ORM。

谁能帮我查询一下在data-items.content

里面有name=abc的所有内容

文档 1:

{
 "title": "Some title",
 "addresse": "data",
 "data-items": { 
 "content": [
   {
   "name": "abc",
   "age": "poster5.jpg"
   },
   {
    "name": "def",
    "age": "poster5.jpg"
   },
   {
    "name": "hij",
    "age": "poster5.jpg"
   }]
 }
}

文档 2:

{
"title": "another title",
"addresse": "data",
"data-items": {
  "content": [
    {
      "name": "abc",
      "age": "poster7.jpg"
    },
    {
      "name": "def",
      "age": "poster5.jpg"
    },
    {
      "name": "hij",
      "age": "poster5.jpg"
    }]
  }
 }

感谢任何帮助

您可以简单地使用 dot notation 查询嵌套文档数组:

Model.find({"data-items.content.name": "abc"})

编辑:要仅获取符合您条件的子文档,您可以使用以下聚合:

Model.aggregate([
    {
        $match: {
            "data-items.content.name": "abc"
        }
    },
    {
        $unwind: "$data-items.content"
    },
    {
        $match: {
            "data-items.content.name": "abc"
        }
    },
    {
        $replaceRoot: {
            newRoot: "$data-items.content"
        }
    }
])

$unwind will give you single document per content and $replaceRoot 会将其提升到根级别。