MongoDb用java外键

时间:2017-08-11 13:09:49

标签: java spring mongodb

我需要使用java在MongoDB中保存两个集合。其中一个集合部门,其他集合员工。如果一个部门可以拥有许多员工,我希望保存一个集合,就像员工唯一ID必须映射到我的部门员工列表中一样。

示例:

{
    "_id" : ObjectId("598da19250aa4ad2413d4bc0"),
    "_class" : "com.department",
    "departmentName" : "SAQ-A",
    "departmentNumber" : "3_2",
    "employee" : [ 
           "id" : "1",
           "id" : "2",
           "id" : "3"
     ]
}

我可以知道使用java在MongoDB中实现它的方式是什么?

2 个答案:

答案 0 :(得分:4)

通过提供的文档和标签,我假设您正在使用spring数据来处理mongodb。因此,您可能希望使用DBRefs将员工绑定到部门。幸运的是,Spring Data为您提供了@DBRef注释。

员工类:

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document
public class Employee {

    @Id
    private Integer id;
    ...

}

系类:

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;

@Document
public class Department {

    @Id
    private String id;

    @DBRef
    private Collection<Employee> employees;
    ...
}

MongoDB文档:

{
    "_id" : ObjectId("598dc04ac4fdd0e29867ccbb"),
    "_class" : "foo.bar.Department",
    "employees" : [ 
        {
            "$ref" : "employee",
            "$id" : 1
        }, 
        {
            "$ref" : "employee",
            "$id" : 2
        }
    ]
}

注意: MongoDB中必须已存在Employee实例。 DBRef不会以级联方式保存员工。请查看有关cascading

的文章

答案 1 :(得分:0)

如果$ id不起作用,请尝试像这样的ID

“员工”:[         {             “$ ref”:“员工”,             “id”:1         },         {             “$ ref”:“员工”,             “id”:2         }     ]