【问题标题】:Database query to filter data inside an object array用于过滤对象数组内的数据的数据库查询
【发布时间】:2019-08-12 13:16:52
【问题描述】:

我的 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"
    }]
  }
 }

感谢任何帮助

【问题讨论】:

    标签: arrays mongodb nodes mongoose-schema


    【解决方案1】:

    您可以简单地使用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 将为您提供每个 content 的单个文档,$replaceRoot 会将其提升到根级别。

    【讨论】:

    • 是的,它有效。有没有办法只返回匹配的对象而不是整个文档?
    • @ArunBabuVijayanath 修改了我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 2019-02-13
    • 2014-08-25
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多