我在Mongodb中有一个文档,如下所示:
现在,我要转到基于特定“ _id
”的文档,对于该文档,要转到“计划”列表,其中列出了几个特定日期(不仅是一个日期,而且还有多个日期)而不是一个),我想将状态更新为“ BOOKED”。我通过此链接,
How to apply update using Filtered positional operator with arrayFilters
但在MongoTemplate类中,updateMulti
方法不使用updateOption
参数。有人可以帮忙
我出去。真的很感谢任何建议。谢谢。
注意:我正在使用spring-data版本“ 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"
}
答案 0 :(得分:2)
如果spring-data中没有“ 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))}
)));
答案 1 :(得分:2)
它将很快在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));
同时,您应该可以将其与快照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>