Spring中的MongoDB首先推送数组,然后发现对象为null

时间:2013-09-17 19:12:40

标签: java arrays spring mongodb spring-mvc

我正在使用Spring的MongoTemplate更新文档

这是更新文档的代码(使产品注释的数组推送);

public void saveProductComment(String productId,ProductComment comment){
    DBObject commentDBO = new BasicDBObject();

    mongoTemplate.getConverter().write(comment, commentDBO);

    mongoTemplate.updateFirst(
            Query.query(Criteria.where("_id").is(productId)),
            new Update().push("comment", commentDBO),
            Product.class);
}

然后我得到更新文档,但在更新后返回null。 有代码可以找到所有文件。

public List<Product> getAllProducts() {
        return mongoTemplate.findAll(Product.class, COLLECTION_NAME);
    }

问题是,当我更新文档时,其存储顺序会发生变化(更新后按字母顺序排序)。 例如;

//Before Update
{
  name: {...} , 
  price: {...} ,
  comment: {[...]}
}
{
  comment: {[...]},
  name: {...} ,
  price: {...} ,
}

如何在更新后实现文档。是否有任何方法可以使用Spring的MongoTemplate或任何替代解决方案来查找文档?谢谢你的关注。

1 个答案:

答案 0 :(得分:0)

我发现了自己的错误;

在使用update.push方法时,mongodb本地将字段更改为数组,因此我的find方法找不到预期的插入类(例如product.class)。所以我在我的Product.Class mongoDB中将ProductComment属性更改为ProductComment []数组,没有问题。