mgo,mongodb:查找一个嵌入式文档,该文档是数组的一部分

user2312578:

问题的两部分。

1是mongodb查询本身,其次是在mgo中的操作。

如何查询1个类别为type的文档(结果应为type类别),其中slug: "general"

我选择这种布局的原因是因为我阅读了mongodb的优点是嵌入式“结构”的性能,但是我担心我必须自己制作“类别”和“论坛”并重写很多代码,我想避免那是因为客户端上的每个视图无论如何都需要访问那些模型,并且这将导致在每个新页面加载(针对类别和论坛)上出现1-2个附加查询,并且不再使用mongodb的优势。

接下来的问题是,如何更新或删除一个特定的嵌入式文档?

有没有一种方法可以直接从mongodb获取类别文档,而无需分开文档或在Go中编写查找,更新,删除功能,以及如何?

这个结构:

{
    "_id" : ObjectId("5303d1a2d6194c0f27000001"),
    "name" : "darko",
    "description" : "darko",
    "subdomain" : "darko",
    "domain" : "mango.dev",
    "created" : ISODate("2014-02-18T21:33:22.115Z"),
    "category" : "Brains",
    "owner" : "52b1d74dd6194c0646000002",
    "members" : [ 
        "52b1d74dd6194c0646000002"
    ],
    "categories" : [ 
        {
            "_id" : ObjectId("5303d1a2d6194c0f27000003"),
            "name" : "Admin and Moderator Area",
            "slug" : "admin-and-moderator-area",
            "adminonly" : true,
            "membersonly" : false,
            "forums" : [ 
                {
                    "_id" : ObjectId("5303d1a2d6194c0f27000005"),
                    "name" : "Admin Discussion",
                    "slug" : "admin-discussion",
                    "text" : "This is the main forum for administrative topics."
                }
            ]
        }, 
        {
            "_id" : ObjectId("5303d1a2d6194c0f27000002"),
            "name" : "General",
            "slug" : "general",
            "adminonly" : false,
            "membersonly" : false,
            "forums" : [ 
                {
                    "_id" : ObjectId("5303d1a2d6194c0f27000004"),
                    "name" : "General Discussion",
                    "slug" : "general-discussion",
                    "text" : "Talk about everything and anything here in this general discussion forum"
                }
            ]
        }
    ]
}

或进行中:

Community struct {
    Id          bson.ObjectId `bson:"_id,omitempty" json:"id"`
    Name        string        `json:"name"`
    Description string        `bson:",omitempty" json:"description"`
    Subdomain   string        `bson:",omitempty" json:"subdomain"`
    Domain      string        `json:"domain"`
    Created     time.Time     `json:"created"`
    Category    string        `json:"category"`
    Owner       interface{}   `json:"owner"`                         //userid
    Members     []interface{} `json:"members"`                       //userid
    Moderators  []interface{} `bson:",omitempty" json:"moderators"`  //userid
    Logo        string        `bson:",omitempty" json:"logo"`        // relative path to file
    Stylesheets []string      `bson:",omitempty" json:"stylesheets"` // absolute path to files
    Javascripts []string      `bson:",omitempty" json:"javascripts"` // absolute path to files
    Categories  []*Category   `json:"categories"`
}

Category struct {
    Id          bson.ObjectId `bson:"_id,omitempty" json:"id"`
    Name        string        `json:"name"`
    Slug        string        `json:"slug"`
    AdminOnly   bool          `json:"-"`
    MembersOnly bool          `json:"-"`
    Forums      []*Forum      `json:"forums"`
}

Forum struct {
    Id         bson.ObjectId `bson:"_id,omitempty" json:"id"`
    Name       string        `json:"name"`
    Slug       string        `json:"slug"`
    Text       string        `json:"text"`
    Moderators []interface{} `bson:",omitempty" json:"moderators"` //userid
}
阿尼斯:

1。

当前,MongoDB没有内置的方式可以返回子文档,您只能返回文档的投影。话虽如此,您仍然可以使用投影来查找所需的数据。

MongoDB的手册为您提供了一个非常类似的例子。您应该进行的查询是:

db.coll.find({}, {categories:{ $elemMatch: {"slug":"general"}}})

2。

使用mgo,使用选择来处理投影部分。氧化镁文档状态:

func(q * Query)Select(选择器界面{})* Query

选择启用选择应该为找到的结果检索哪些字段。

没有尝试过,它应该看起来像这样:

err := collection.Find(nil).Select(bson.M{"categories": bson.M{"$elemMatch": bson.M{"slug": "general"}}}).One(&result)

为了获得嵌套的Category对象,可以让它result成为一个包含结构:

type CategoryContainer struct {
    Categories []Category{} // Or even [1]Category{} in this case
}

然后简单地获取类别:

category := result.Categories[0]

3。

对于更新子文档,已经有很好的帖子,例如:

MongoDB:更新子文档

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

查找一个mongodb文档,该文档的字段值与输入数组的某项匹配

MongoDB嵌入式文档数组:仅获取一个具有特定属性的嵌入式文档

使用mgo对mongoDB中的嵌入式文档进行部分更新

mgo,mongodb:从嵌入式结构中查找与一个字段匹配的文档

获取原始文档字段作为汇总结果的一部分

ElasticSearch聚合嵌套字段作为父文档的一部分

从mongo引擎中的另一个嵌入式文档访问嵌入式文档

JDK文档是语言规范的一部分吗?

保留数组的第一个元素作为序列的一部分

Mongodb-如何仅获取文档的一部分

文档querySelectorAll查找元素的属性名称的一部分?

删除数组mongodb的一部分

ElasticSearch:在数组中进行全文搜索,而忽略文档,其中所查找的文本是数组元素的一部分

Spacy:尝试设置有冲突的文档:令牌只能是一个实体的一部分,因此请确保您要设置的实体不重叠

如何更新mongodb文档字符串的一部分?

如何使用Node.js在MongoDB中获取文档的一部分?

在编辑器中仅显示文档的一部分

仅检索文档的一部分

查找文本的一部分并写入另一个文件

mongodb与嵌入式文档的一对多关系

从perl中的一部分哈希创建一个数组

查找多个作为一个的一部分

PHP检查是否另一个数组的一部分

MongoDB $ match不适用于子文档的一部分

从另一个子文档填充猫鼬的子文档,其中两个子文档都是主文档的一部分

有没有办法在MongoDB中返回文档中数组的一部分?

MongoDB /节点:将集合中的一部分文档插入另一个集合中的文档

犯了一个错误:文档收集是一个嵌入式功能

检查xml是否是Java中pdf文档的一部分的最佳方法

TOP 榜单

热门标签

归档