对不起,很愚蠢的问题。
我正在使用Morphia 1.00。
有一些实体:

@Entity("Vacancy")
public class Vacancy {

@Id
private ObjectId id;
@Version
long version;

private String title;

和其他一些领域,setter和getters。
尝试保存相同的实例:
Vacancy vacancy1 = new Vacancy();
vacancy1.setTitle("Dumm");
Vacancy vacancy2 = new Vacancy();
vacancy2.setTitle("Dumm");

vacancyDao.getDatastore().save(vacancy1);
vacancyDao.getDatastore().save(vacancy2);

据我所知,mongoDb必须执行upsert命令(意味着“如果存在,则进行更新;如果缺少,则插入(单个文档)”)。
但是,mongo不仅更新了_id字段,还在数据库中保存了新实体。

最佳答案

当您不为要插入的对象(文档)指定ObjectId时,morphia会生成一个“新” ObjectId,并在可以插入该对象(文档)之前进行设置。

因此,每个没有ObjectId的对象都将被赋予新的唯一对象ID,并且该对象将被视为新的“文档”。

如果要更新,请执行以下操作

Vacancy vacancy1 = new Vacancy();
vacancy1.setTitle("Dumm");
Vacancy vacancy2 = new Vacancy();
vacancy2.setTitle("Dummmmm");

vacancyDao.getDatastore().save(vacancy1);

vacancy2.setId(vacancy1.getId());
vacancyDao.getDatastore().save(vacancy2);//This line will update the "Dumm" to "Dummmmm"

07-24 09:27