【问题标题】:Map and Index foreign key in MongoDb using C# Driver Serialization使用 C# 驱动程序序列化在 MongoDb 中映射和索引外键
【发布时间】:2013-12-14 13:57:25
【问题描述】:

给出下面列出的模型,我想使用 MongoDb.Driver.Serialization 为属性 PostId 创建一个 IndexKey。

    public class Post
    {
        public ObjectId Id { get; private set; }
        public string Title { get; set; }
        public string Body { get; set; }
        public IList<Comment> Comments { get; set; }
    }

    public class Comment
    {

        public ObjectId Id { get; private set; }

        public string Email { get; set; }
        public string Body { get; set; }

        public ObjectId PostId { get; set; }

        public Post Post { get; set; }
    }

我想使用类似的东西

    MongoDB.Bson.Serialization.BsonClassMap.RegisterClassMap<Post>(p =>
    {
        p.MapIdField(f => f.Id);
    });

【问题讨论】:

标签: c# .net mongodb mongodb-.net-driver


【解决方案1】:

如果您只想为该属性应用索引,您应该使用CreateIndex 外键实际上并不是 NoSQL 和 MongoDB 的一部分。它不能像 SQL 数据库那样真正执行该规则。

例子:

_databaseClient.GetServer().GetDatabase("database").
    GetCollection<Comment>("Comments").CreateIndex(
        IndexKeys<Comment>.Ascending(_ => _.PostId ));

【讨论】:

  • 感谢您的回复。我知道这不是 NoSQL 数据库的目标,但 mongodb 每个文档的限制为 0f 16mb(不确定),并且基于该限制有时会保存到 de-normailze de 数据。我的问题是,是否有一种使用 EnsureIndex 的方法,使用驱动程序的序列化命名空间内的映射功能。
  • 我不这么认为。另外,你为什么要关心它是在MongoDb.Driver.Serialization 下还是MongoDB.Driver
  • 抱歉回复晚了。在序列化命名空间中有一个映射类调用 RegisterClassMap 此类允许将 db 字段映射到数据库字段,我想知道是否有一种方法可以使用类告诉 mongodb 特定字段是索引字段。类似于实体框架中的fluent api
  • 序列化定义了如何将您的对象转换为文档。添加索引是您对数据库本身执行的操作。序列化实际上不是该操作的正确位置。
  • 在你用Index 属性修饰类之前,我写过类似的东西,每个属性代表一个要在数据库上构建的索引。我有一个“构建索引”函数,它使用反射来遍历用index 属性修饰的类,并使用 mongodb 驱动程序来确保它们存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-17
  • 1970-01-01
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多