0

我正在使用 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 或任何替代解决方案查找文档?感谢您的关注。

4

1 回答 1

0

我发现了自己的错误;

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

于 2013-09-22T23:18:21.050 回答