在 spring-data-mongodb 创建的子对象上使用 criteria.all

Use criteria.all on subobjects created by spring-data-mongodb

我有一个包含子对象数组的对象,由 spring-data-mongodb 存储在 mongo 中。这是一个类似于我的案例的例子:

{ 
    "_class" : "com.foo.bar.Customer", 
    "_id" : ObjectId("5050aef830041f24ff2bd16e"), 
    "name": "John Doe"
    "cart":
      [ 
       {
         productName: "test",
         "price": 9001
       },
       {
         "productName": "test2",
         "price": 1337
       }
      ],
     "discount":0
}

我正在进行更新查询。假设我想为购物车中包含特定产品的所有客户更新折扣。我正在做这个查询

Update update = new Update();
update.set("discount", 10)
List<Product> products = new ArrayList<Product>();
products.add(new Product("test", 9001);
products.add(new Product("test2", 1337);
WriteResult writeResult = mongoOps.updateMulti(query(where("cart").all(products)), update, Customer.class);

这不起作用,因为 Spring 将 _class 属性 添加到 $all 标准中使用的每个产品,但是 spring 没有将 _class 添加到子对象,当我首先救了客户。

有没有办法让它工作?

P.S :我正在使用 spring-data-mongodb 1.5.0。根据文档,子对象也应该有一个 _class 属性,但它们没有。这是一个已知问题吗?

这是 spring-data-mongodb 中的错误。 Spring 查询子对象时应将 _class 属性添加到子对象或省略它。

它似乎已在即将发布的 spring-data-mongodb (1.7.0.M1) 版本中修复。在此版本中,比较子对象的查询不会将 _class 属性添加到发送到 mongo 的 json。