首页 > 解决方案 > 使用 MongoOperation 在 Spring Data MongoDB 中构建 ArrayFilters 更新

问题描述

我正在使用 Spring boot 2.2.1.RELEASE。如何使用 Spring MongoOperation 编写以下 MongoDB 更新查询

db.cities.updateOne(
  {
    _id : ObjectId("5e78ec62bb5b406776e92fac")
  },
  { 
    $inc: { 
      "subscriptions.$[category].subscribers" : 1,
      "subscriptions.$[category].options.$[option].subscribers" : 1
    }
  },
  { multi: true,
    arrayFilters: [
      { "category._id": {$in: ["1", "2"]} },
      { "option.name": {$in: ["Time", "Gourmand", "Politics", "Entrepreneurship"]} } 
    ]
  }
)

我试过以下

Update update = new Update().inc("subscriptions.$[category].subscribers", 1).inc("subscriptions.$[category].options.$[option].subscribers", 1).filterArray(Criteria.where("category._id").in(Arrays.asList("1", "2")).andOperator(Criteria.where("option.name").in(Arrays.asList("Time", "Gourmand", "Politics", "Entrepreneurship"))));
UpdateResult result = mongoOperations.updateFirst(new Query(where("id").is(cityId)), update, CitiesDoc.class);

但我不断收到以下错误

org.springframework.dao.InvalidDataAccessApiUsageException:命令失败,出现错误 9 (FailedToParse):服务器 localhost:56740 上的“更新操作中无法识别的字段:arrayFilters”。完整的响应是 {"ok": 0.0, "errmsg": "Unrecognized field in update operation: arrayFilters", "code": 9, "codeName": "FailedToParse"}; 嵌套异常是 com.mongodb.MongoCommandException: 命令失败,错误 9 (FailedToParse): 'Unrecognized field in update operation: arrayFilters' on server localhost:56740. 完整的响应是 {"ok": 0.0, "errmsg": "Unrecognized field in update operation: arrayFilters", "code": 9, "codeName": "FailedToParse"}

不确定它给出的错误是哪个字段。一些建议会有所帮助。

标签: javaspringmongodbnosqlspring-mongodb

解决方案


将以下内容添加到application.yaml

spring:
  mongodb:
    embedded:
      version: 4.0.2

推荐阅读