为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用官方 mongo 驱动程序查找嵌套文档 mongodb

如何使用官方 mongo 驱动程序查找嵌套文档 mongodb

Go
Helenr 2022-10-31 16:55:53
我有这个文档,想过滤它以获取并记录在 Content 数组中:[{    "ID": "61f1244daeaea5f165851fc9",    "name": "Mulandi",    "author": "Owayo",    "description": "dnjsfnvlksfnvls",    "created_at": "2022-01-26T10:37:01.558Z",    "Section": [        {            "ID": "61f557213fd9b086c3a422c5",            "Title": "Weee",            "Content": [                {                    "ID": "61f5586e3fd9b086c3a422dc",                    "Subsection_Title": "Idk",                    "Content": "Something"                }            ]        }    ],}]我应该怎么做才能过滤这个文件我试过这个但它没有用:pipeline := []bson.M{        {"$match": bson.M{"Name": name}},        {"$unwind": "$Section"},        {"$unwind": "$Section.Content"},        {"$project": bson.M{            "Section.Title":                sectiontitle,            "Section.Content.subsectionid": iuud,        }},    }    iter, err := collection.Aggregate(ctx, pipeline)    if err != nil {        return nil, err    }    var elem models.Course    for iter.Next(ctx) {        var elem models.Section        err = iter.Decode(&elem)        if err != nil {            log.Fatal(err)        }    }
查看完整描述

2 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

db.collection.aggregate([

  {

    "$match": {

      "name": "Mulandi"

    }

  },

  {

    "$unwind": "$Section"

  },

  {

    "$unwind": "$Section.Content"

  },

  {

    "$match": {

      "Section.Content.ID": "61f5586e3fd9b086c3a422dc"

    }

  },

  {

    "$project": {

      "Subsection_Title": "$Section.Content.Subsection_Title",

      "Content": "$Section.Content.Content",

      "_id": "$Section.Content.ID"

    }

  }

])

mongoplayground


查看完整回答
反对 回复 2022-10-31
?
白板的微信

TA贡献1883条经验 获得超3个赞

iuud, _ := primitive.ObjectIDFromHex(subsectionid)

pipeline := []bson.M{

    {"$match": bson.M{"Name": name}},

    {"$unwind": "$Section"},

    {"$unwind": "$Section.Content"},

    {"$match": bson.M{"Section.Content.ID": iuud}},

    {"$project": bson.M{

        "Subsection_Title": "$Section.Content.Subsection_Title",

        "Content":       "$Section.Content.Content",

        "_id": "$Section.Content.ID",

    }},

iter, err := collection.Aggregate(ctx, pipeline)

if err != nil {

    return nil, err

}

var results []bson.M

if err = iter.All(context.TODO(), &results); err != nil {

    log.Fatal(err)

}


查看完整回答
反对 回复 2022-10-31
  • 2 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信