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 に答える