今天我们学习下DBRef的使用,用过mongodb的都知道mongodb不能做关联查询,关系型数据库中是可以的,当然我们不要用关系型数据库的思想来用nosql。 但是实际应用中也是会有类似的需求的。 在mongodb中可以使用DBRef来关联 定义要用到的实体类 @Document public class Class { @Id private String id; //班级名称 private String className; //开班时间 private Date openDate; //引用学生信息 @DBRef private class Student { @Id private String id; //学生姓名 private String stuName; //引用班级 @DBRef className": "五年级一班", "openDate": ISODate("2016-10-09T13:52:25.678Z"), "students": [ DBRef
Spring Data Mongodb多表关联查询 Spring Data Mongodb多表关联查询 lookup 去掉DBRef中”\id”的”\” 自定义RemoveDollarOperation public class Department { @Id private String id; private String departmentName; @DBRef private Company company; @DBRef private List<Employee> employeeList; } // 员工 public class private String id; private String employeeName; private String phone; @DBRef ("5c244aafc8fbfb40c02d830c")), DBRef("employee", ObjectId("5c244aafc8fbfb40c02d830d")) ],
引用数据库 MongoDB提供了两种方式实现文件间的引用:手动引用或使用DBRef标准。 (1)手动引用 手动引用通过在一个文档中使用另一个文档中的_id实现。 引用数据 DBRef提供了文档之间的引用数据的更正式的规范。 使用DBRef的主要原因是,引用中文档所在集合可能发生变化。如果引用的一直都是相同的集合,那么手动引用数据也可以。 使用DBRef可以将数据库引用存储为标准的嵌入对象(JSON/BSON)。使用一种标准方式代表引用,意味着驱动和数据框架可以添加辅助方法,以标准的方法操作引用。 下面是一个使用了DBRef的样例。
红楼梦", "author": { "name": "三国演义", "author": "罗贯中" } } 此时就完成了文档的嵌套操作 外键查询 使用js语言,进行查询关联 这里使用new DBRef 此时对于DBRef具有以下字段。 $ref 该$ref字段包含引用文档所在的集合的名称。 $id 该$id字段包含_id引用文档中字段的值。 方式完成集合的关联 // 通过添加new DBRef 关键字,完成对集合的关联,这里通过new DBRef作为关键字,其中A为key,ObjectId 为value,进行关联 > var Ba={Apid :[new DBRef('A',ObjectId("4e3f33de6266b5845052c02c"))],value:3} // 保存集合 > db.B.save(Ba) > var Ba={Apid:[new DBRef('A',ObjectId("4e3f33de6266b5845052c02c"))],value:4} >
原文链接:http://www.baeldung.com/cascading-with-dbref-and-lifecycle-events-in-spring-data-mongodb 作者: baeldung 概述 本教程将继续探索Spring Data MongoDB的一些核心特性——@DBRef 注解和life-cycle事件。 2. @DBRef 映射框架不支持在其他document中存储parent-child关系和嵌入式document。我们可以做的是——我们可以分别存储它们,并使用DBRef来引用这些document。 让我们看一些代码: @DBRef private EmailAddress emailAddress; EmailAddress的定义如下所示: @Document public class EmailAddress 总结 在本文中,我们展示了Spring Data MongoDB的一些很酷的特性——@DBRef注解、life cycle事件以及我们如何智能地处理级联。
@DBRef 关联另一个document对象。类似于mysql的表关联,但并不一样,mongo不会做级联的操作。 先来看一下不加DBRef时,mongo保存数据的情况: Article类有String title,List pictureList,两个属性,Picture有一个url,一个desc属性。 在Article里给list加上DBRef注解后就不同了 ? 再次执行添加Article操作后,看结果 ? 从上面看来,貌似DBRef比较鸡肋,而且甚至有时还会带着误导的性质,譬如Article关联了两个空的Picture时在Article还能看到2个对象的引用,然后2个对象并不存在,是查询不出来的。 references to documents in different collections.like when you want to take advantage of some additional DBRef-specific
Author { @Id private ObjectId id; @Indexed(unique = true) private String name; @DBRef "_id" : ObjectId("5b0bec767a49d017f0e46c69"), "name" : "Julius", "books" : [ DBRef ("books", ObjectId("5b0bec767a49d017f0e46c64")), DBRef("books", ObjectId("5b0bec767a49d017f0e46c68 ")), DBRef("books", ObjectId("5b0bec767a49d017f0e46c67")), DBRef("books", ObjectId( "5b0bec767a49d017f0e46c63")), DBRef("books", ObjectId("5b0bec767a49d017f0e46c65")),
user = col.FindOne(x => x.Age > 20); // 数据删除 col.Delete(user.Id); 使用 fluent 映射器和跨文档引用处理更复杂的数据模型 // DbRef mapper = BsonMapper.Global; // "Produts" 和 "Customer" 来自其他集合 (而不是嵌入的文档) mapper.Entity<Order>() .DbRef (x => x.Customer, "customers") // 1 对 1/0 引用 .DbRef(x => x.Products, "products") // 1 对多引用
id; @Indexed(name = "deptName") private String name; private String description; @DBRef @DbRef 关联另一个Document对象,存入的是文档的引用,如果不使用这个注解,存入的是内容。 不过即使使用@DbRef,mongodb本身并不维护关联数据,也就是说需要手动将数据插入到被关联文档。
4.1.2 DBRef MongoDB 支持一个叫做 DBRef 的功能,许多 MongoDB 的驱动都提供对这一功能的支持。当驱动遇到一个 DBRef 时它会把当中引用的文档读取出来。 DBRef 包含了所引用的文档的 ID 和所在的集合。它通常专门用于这样的场合:相同集合中的文档需要引用另外一个集合中的不同文档。 例如,文档 1 的 DBRef 可能指向 managers 中的文档,而文档 2 中的 DBRef 可能指向 employees 中的文档。 可以这么说,DBRef 并不是那么常用,虽然您完全可以试着采用这项技术。这使得新手们在面临选择嵌入文档还是手工引用(manual reference)时犹豫不决。
4.1.2 DBRef MongoDB 支持一个叫做 DBRef 的功能,许多 MongoDB 的驱动都提供对这一功能的支持。当驱动遇到一个 DBRef 时它会把当中引用的文档读取出来。 DBRef 包含了所引用的文档的 ID 和所在的集合。它通常专门用于这样的场合:相同集合中的文档需要引用另外一个集合中的不同文档。 例如,文档 1 的 DBRef 可能指向 managers 中的文档,而文档 2 中的 DBRef 可能指向 employees 中的文档。 可以这么说,DBRef 并不是那么常用,虽然您完全可以试着采用这项技术。这使得新手们在面临选择嵌入文档还是手工引用(manual reference)时犹豫不决。
就比如说最近需要做的DBRef嵌套类型的数据要做CRUD如果使用mog驱动的话会非常麻烦。
以下示例使用 DBRef 来引用独立于引用它的对象存在的特定文档(为简洁起见,两个类都显示为内嵌): @Document public class Account { @Id private 当对象存储在 MongoDB 中时,有一个 DBRef 列表而不是Account对象本身。在加载DBRefs 的集合时,建议将集合类型中保存的引用限制为特定的 MongoDB 集合。 使用的lazy属性@DBRef来指定这一点。也定义为延迟加载DBRef并用作构造函数参数的必需属性也使用延迟加载代理进行修饰,以确保尽可能减少对数据库和网络的压力。 请考虑启用跟踪日志记录 org.springframework.data.mongodb.core.convert.DefaultDbRefResolver以深入了解DBRef解决方案。 DBRef解析为具有固定结构的文档,如MongoDB 参考文档中所述。 文档引用,不遵循特定格式。它们实际上可以是任何东西,单个值,整个文档,基本上可以存储在 MongoDB 中的所有内容。
2.00 REMARK 800 SITE_DESCRIPTION: BINDING SITE FOR RESIDUE MK1 B 902 结构部分 DBREF [http://www.wwpdb.org/documentation/file-format-content/format33/sect8.html] DBREF 1HSG A 1 99 UNP P03367 POL_HV1BR 69 167 DBREF 1HSG B 1 99 UNP P03367 POL_HV1BR
就比如说最近需要做的DBRef嵌套类型的数据要做CRUD如果使用mog驱动的话会非常麻烦。
Security + Spring数据+ MongoDB进行身份验证 48.Java ORM for MongoDB的开销是多少 49.使用Jackson PTH和Spring Data MongoDB DBRef 如果我现在要开始使用哪一个, 49.使用Jackson PTH和Spring Data MongoDB DBRef的Java到JSON序列化生成额外的目标属性 从Java序列化为JSON时,target 当使用@DBRef带有延迟加载和Jackson的多态类型处理的Spring Data MongoDB 批注时,Jackson会为引用的实体生成一个额外的属性。 代码示例 @Document(collection = "cdBox") public class CDBox { @Id public String id; @DBRef(lazy = List<Product> products; } @Document(collection = "album") public class Album extends Product { @DBRef
+AI代码解释classTransaction{private:Database&db;boolcommitted=false;public:explicitTransaction(Database&dbRef ):db(dbRef){db.beginTransaction();//可能抛出异常}//提交事务voidcommit(){if(!
所有嵌套对象都作为嵌套对象存储在文档中,而不是作为 DBRef 存储。 转换器使用任何注册的 Spring 转换器来覆盖对象属性到文档字段和值的默认映射。 对象的字段用于在文档中的字段之间进行转换。 @DBRef:应用于该字段以指示将使用 com.mongodb.DBRef 存储它。 @DocumentReference: 应用于该字段以指示它将被存储为指向另一个文档的指针。 private String lastName; private Integer age; @Transient private Integer accountTotal; @DBRef
提供了如下功能 1、对象/文档映射注解 Spring Data MongoDB提供了如下所示的注解: 注解 含义 @Document 映射领域对象与MongoDB的一个文档 @Id 映射当前属性是文档对象ID @DBRef
发表坐标集的文献) 13 REMARK REMARK 1(有关文献) REMARK 2(最大分辨率) REMARK 3(用到的程序和统计方法) REMARK 4-999 二 一级结构 1 DBREF