mongodb是nosql数据库吗 7 NoSQL | MongoDB入门实战教程( 二 )


假设我们的实体定义如下:
public class Contact{[BsonId][BsonRepresentation(BsonType.ObjectId)]public string Id { get; set; }public string Name { get; set; }public string Company { get; set; }public string Title { get; set; }public int[] GroupIds { get; set; }public IList<Group> Groups { get; set; }}public class Group{[BsonId][BsonRepresentation(BsonType.ObjectId)]public string Id { get; set; }public int GroupId { get; set; }public string Name { get; set; }}那么 , 可以通过Driver实现以下操作:
public async Task<IList<Contact>> GetAsync(){return await _contacts.Aggregate().Lookup<Contact, Group, Contact>(_groups,local => local.GroupIds,from => from.GroupId,result => result.Groups).ToListAsync();}完整示例github地址:https://github.com/EdisonChou/EDT.Mongo.Sample
运行结果如下所示:

mongodb是nosql数据库吗 7 NoSQL | MongoDB入门实战教程

文章插图
什么时候使用引用模式
综上所述 , 当满足以下条件之一时 , 你可以开始考虑引用模式设计文档模型:
(1)当内嵌后的文档太大 , 有可能超过16MB限制的时候;
(2)内嵌的文档 或 数组元素 有可能会频繁修改的时候;
(3)内嵌数组元素 有可能会持续增长且没有封顶的时候;
引用模式设计的限制
引用模式也并非银弹 , 它存在以下一些限制:
(1)MongoDB对于使用引用的集合之间没有所谓的外键检查;
(2)MongoDB使用聚合框架的$lookup来模仿关联查询;
(3)$lookup只支持LEFT OUTER JOIN , 且关联目标(from)不能是分片表;
db.Contacts.aggregate([{$lookup:{    from: "groups", // 这里的from不能是分片表......}}]);3 总结
本文简单介绍了MongoDB的模型设计中的内嵌模式和引用模式 , 探讨了引用模式的使用、何时使用 及 使用限制 。
下一篇 , 我们会学习MongoDB的模式设计中的一些设计模式并套用这些设计模式简化设计难度 。
参考资料
唐建法 , 《MongoDB高手课》(极客时间)
郭远威 , 《MongoDB实战指南》(图书)


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: