好的这么简单,这是剥离的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)。答案 0 :(得分:1)
_id字段是不可变的,不能更改。
我怀疑您的数据或测试还有其他问题。您可能已使用新的_id插入了新的Person记录。如果它再次发生,您可能需要使用mongo shell验证集合的内容。
答案 1 :(得分:0)
没有。 _id字段在数据库中是不可变的。