MongoDB(与Morphia)自己改变_id?

时间:2014-04-23 14:46:20

标签: mongodb morphia

好的这么简单,这是剥离的Morphia模型:

@Entity
public class Person implements Serializable {


    @Id
    private ObjectId id;

    @Reference
    private List<Friend> friends = new ArrayList<Friend>();

    ...
}



@Entity
public class Friend implements Serializable {

    @Id
    private ObjectId id;

    private ObjectId personId;

    ...
}

Person对象包含Friend对象的集合。这些Friend对象包含一个“personId”ObjectId,它是Person的ObjectId(朋友也是一个人)。是的我知道我可以在这里使用Person对象......但是我不会理解为什么我这样做。

无论如何,我使用查询从Friend对象中的personId获取实际的Person对象:

final Person person = datastore.find(Person.class).field("_id").equal(personId).get();
直到昨晚,这才得以完美运作。由于某种原因,查询开始返回null(无法根据_id值找到Person对象)。

到目前为止,我没有对代码进行任何更改。我没有调查它,我刚刚删除了我的数据库并重新开始,所以我的问题在这里非常高。

MongoDB可以随意更改文档的_id吗?存储在Friend对象中的personId ObjectId似乎不再指向Person集合中的有效Person对象。这是否可能(看起来是这样)?我以为一旦创建了Document,就无法更改_id。

顺便说一句,没有什么特别的DB(即没有Sharding)。

2 个答案:

答案 0 :(得分:1)

_id字段是不可变的,不能更改。

我怀疑您的数据或测试还有其他问题。您可能已使用新的_id插入了新的Person记录。如果它再次发生,您可能需要使用mongo shell验证集合的内容。

答案 1 :(得分:0)

没有。 _id字段在数据库中是不可变的。