当前位置: 首页 > 知识库问答 >
问题:

如何在没有objectId的情况下使用spring-data mongodb来Upsert?

尉迟跃
2023-03-14

我试图使用spring-data来取代我们当前使用POJO进行mongodb文档的做法,在本例中,我使用了一些字段,而不是使用字段作为实体的Id。

class Thing {
    public String firstName;
    public String lastName;
    public Int age;
}
Document doc = new Document();
doc.append("firstName", thing.firstName);
doc.append("lastName", thing.lastName);
doc.append("age", thing.age);

然后我创建一个查询:

BasicDBObject query = new BasicDBObject(
    and(
        new BasicDBObject("firstName", thing.firstName),
        new BasicDBObject("lastName", thing.lastName)) 

然后我使用mongodb驱动程序更新文档。

collection.updateOne(query, document, UpdateOptions().upsert(true))

这样,我只更新age,而不需要考虑对我来说毫无意义的ObjectId。

class Thing {
    @Id public String firstName;
    @Id public String lastName;
    public Int age;
}
class ThingKey {
    public String firstName;
    public String lastName;    
}

class Thing {
    @Id public ThingKey thingKey;
    public Int age;
}

共有1个答案

罗伟兆
2023-03-14

官方文件中有一节是关于“提升”的。似乎必须在mongoTemplate上使用upsert()findandmodify()

或者,您可以执行find(),对返回的对象执行更改,然后执行save()

 类似资料:
  • 问题内容: 我在整个应用程序中都使用spring 。现在,我也想为一个没有的创建一个。那有可能吗? 问题答案: JPA要求每个实体都有一个ID。因此,不可以,没有ID的实体是不允许的。 每个JPA实体都必须有一个主键。 从JPA规范 您可能想从这里阅读更多有关JPA如何处理数据库端没有ID的情况的信息(请参阅“无主键”)。

  • 问题内容: 我正在尝试设置spring xml配置,而不必创建进一步的。但是,即使我将数据库属性包括在 spring.xml: 我在这里想念什么? 问题答案: 在entityManagerFactory bean定义中指定“ packagesToScan”和“ persistenceUnitName”属性。 请注意,这适用于Spring版本> 3.1

  • 我有一个现有的spring 4项目(mvc、jdbc等),我试图将其移植到spring boot,但我做不到(许多依赖项存在问题,没有人能解释我是如何做到这一点的)。但现在我只想在现有项目中使用Spring数据JPA。这是pom的一个主要依赖项: 我使用EntityManagerFactorybean(在所有示例中都使用)完成了现有配置。数据库配置: 用于测试的Derby数据库。但主要数据库类型是

  • 我正在玩grpc 有人成功使用进行生产吗?我们需要包括特使在内的所有依赖项吗?

  • 我看到的所有解决方案都需要使用。但是,我想在Eclipse之外的单个文件上使用CDT解析器。那有什么办法吗?

  • 我正在尝试将使用webpack转译. vue文件的Vue项目的绝对最低示例放在一起。 我的目标是详细了解每个构建步骤。大多数教程建议使用并使用config。尽管这种设置很有效,但对于我的简单目的来说,似乎有些过头了。目前,我不想要babel、linting或带有热模块重新加载的实时web服务器。 一个简单的例子,只需就可以了!Webpack将vue库和我自己的代码编译成一个包。 但现在,我想将vu