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

如何使用updateOption与arrayFilters在sping-data mongodb?

焦同
2023-03-14

我在Mongodb中有一个如下所示的文档:

现在,我想转到一个基于特定“\u id”的文档,对于该文档,我想转到“时间表”列表,其中对于几个特定日期(不仅是一个日期,而且是多个日期),我想将状态更新为“已预订”。我浏览了这个链接,如何使用过滤的位置运算符和ArrayFilter应用更新,但是在MongoTemplate类中,updateMulti方法不接受updateOption参数。有人能帮忙吗

我出去。真的会感谢任何建议。谢谢。

注意:我使用的是spring数据版本“2.0.3.RELEASE”,MongoDB驱动程序版本是v3。6.4.

以下是一份文件:

{
      "_id": "x1",
      "timeZone": "America/Los_Angeles",
      "schedule": [
        {
          "Date": "2018-07-10T00:00:00.000Z",
          "status": "AVAILABLE"
        },
        {
          "Date": "2018-07-10T00:30:00.000Z",
          "status": "AVAILABLE"
        },
        {
          "Date": "2018-07-10T08:00:00.000Z",
          "status": "AVAILABLE"
        }
      ],
      "_class": "com.scheduler.persistance.model.Calendar"
    }

共有3个答案

怀晋
2023-03-14

//假设集合基于类外的名称测试。班

Query query = new Query();
query.addCriteria(Criteria.where("_id").is("someID");
Update update = new Update();
update.set("schedule.$[myRec].status", "BOOKED" );
update.filterArray("myRec.Date", dateValue);
FindAndModifyOptions options = new FindAndModifyOptions().returnNew(true);
mongoTemplate.findAndModify(query, update, options, Test.class);
阴波峻
2023-03-14

如果spring数据中没有“updateOption”,那么我们可以使用普通驱动程序jar。我希望它能解决你的问题。

MongoDatabase db = client.getDatabase("test");

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z');
format.setTimeZone("EST");

List<Date> dateList = Arrays.asList(new Date[]
                                {format.parse("2018-07-10T00:30:00.000Z")}
                               );

db.getCollection("test").updateMany(new Document("_id", "x1"),
        new Documen("$set", new Document("schedule.$[elem].status", "booked")),
        new UpdateOptions().arrayFilters(Arrays.asList(new Document[]
            {new Document("elem.Date", new Document("$in", dateList))}
        )));
柳联
2023-03-14

它将很快在spring data mongodb中提供。见:https://github.com/spring-projects/spring-data-mongodb/pull/656

使用它将看起来像:

new Update()
.set("grades.$[element]", 100)
.filterArray(Criteria.where("element").gte(100));

同时,您应该能够将其与snapshot maven存储库一起使用:

<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-mongodb</artifactId>
  <version>2.2.0.DATAMONGO-2215-SNAPSHOT</version>
</dependency>

<repository>
  <id>spring-libs-snapshot</id>
  <name>Spring Snapshot Repository</name>
  <url>https://repo.spring.io/libs-snapshot</url>
</repository>
 类似资料:
  • 我们正在启动一个新项目,我们正在考虑使用spring hateoas/超媒体。HAL浏览器看起来也很有趣,所以我们想看看。 然而,HAL浏览器似乎与spring data rest捆绑在一起,我们不想使用它(出于不同的原因)。 至少我们不想将所有存储库自动公开为rest资源,但在这样做时,除了使用spring hateoas定义链接外,我们还需要明确定义HAL浏览器的链接。 当不自动公开存储库时,

  • 问题内容: 我在Mongodb 3.6上运行,带有mongo驱动程序3.4.3和spring数据mongo 1.5.10。下面是我的文档结构 正在尝试对数据进行批量更新,如下所示 现在,尝试将此代码转换为Java。下面是我能够进行批量更新的代码。不出所料,由于$ []的使用,以下查询将更新所有文档。我试图弄清楚如何使用位置数组更新运算符(例如$ [one])在此处应用数组过滤器。 另外,我找不到足

  • 我们正在使用spring kafka 1.2.2。释放 我们想要的 1.一旦消息被消费并成功处理,就会在spring-kafka中提交偏移量。 我正在使用Manaul Commit/Ac认收它,它工作正常。 2.在任何异常的情况下,我们希望spring-kafka重新发送相同的消息。 我们对任何系统误差抛出RunTime异常,它由spring-kafka记录并且从未提交。 这很好,因为我们不希望它

  • 我有以下内容:我注意到在运行代码的末尾,如果我打印出aggregations.asMap(). get('subject');我得到:org.elasticsearch.search.aggregations.bucket.terms.StringTerms@6cff59fa 打印出“聚合”给了我:org.elasticsearch.search.aggregations.InternalAggr

  • 我有大约20个API,我想为每个API实现执行时间、响应计数等统计信息。在做了一些研究之后,我了解到dropwizard度量是实现这些功能的最佳方法。我使用的是SpringMVC框架(不可启动)。有人能建议我如何将度量集成到Spring MVC框架中吗? 如果可能,请提供任何代码作为参考。

  • 我试图找到一种方法来使用新的DefaultErrorHandler而不是弃用的SeekToFlutErrorHandler在sping-kafka 2.8.1,以覆盖重试默认行为的错误情况下。我想“停止”重试过程,所以如果发生错误,不应该重试。 现在,在一个配置类中,我有了如下bean,它可以按预期工作: 由于在这个Spring的kafka版本中,STCEH是弃用的,我试图在同一个配置类中执行以下