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

时间:2015-01-22 16:45:16

标签: 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属性,但它们不是。这是一个已知的问题吗?

1 个答案:

答案 0 :(得分:0)

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

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