首页 > 解决方案 > 用于过滤对象数组内的数据的数据库查询

问题描述

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

有人可以帮我查询一下里面有name=的所有内容吗abcdata-items.content

文件 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"
    }]
  }
 }

任何帮助表示赞赏

标签: arraysmongodbnodesmongoose-schema

解决方案


您可以简单地使用点符号来查询嵌套文档数组:

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将为您提供单个文档,content$replaceRoot会将其提升到根级别。


推荐阅读