【问题标题】:MongoDb with Java foreign key带有 Java 外键的 MongoDb
【发布时间】:2020-08-26 21:03:16
【问题描述】:

我需要使用 Java 在我的 MongoDB 中保存两个集合。其中一个集合是Department,另一个集合是Employee。如果一个部门可以有许多员工,我想保存一个集合,例如必须在我的部门员工列表中映射的员工唯一 ID。

例子:

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

我可以知道我可以在 MongoDB 中使用 Java 实现它的方式吗?

【问题讨论】:

    标签: java spring mongodb spring-data spring-data-mongodb


    【解决方案1】:

    通过提供的文档和标签,我假设您正在使用 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
            }
        ]
    }
    

    注意: Employee 实例必须已经存在于 MongoDB 中。 DBRef 不会以级联方式保存员工。看看这篇关于cascading的文章。

    【讨论】:

      【解决方案2】:

      如果 $id 不起作用,试试这样的 id

      “员工”:[ { "$ref" : "员工", “身份证”:1 }, { "$ref" : "员工", “身份证”:2 } ]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多