2

以下に示すようなコードがあります。MongoDB にクエリを実行すると、結果がシリアル化されて返されます。しかし、すべてのレコード/ドキュメントに新しい値を追加したいと思います。この場合は「年齢」です。そのため、結果をループして one.put で追加すると思いましたが、返された json に値が表示されません。

私は何を間違っていますか?

助けや提案をありがとう!

    public String (int id){     
        DBCollection collection = database.getCollection("collection");
        BasicDBObject query = new BasicDBObject();
        query.put("id", id);

        DBCursor cursor = collection.find(query);       
        if (cursor.hasNext()) {
            DBObject one = cursor.next();
            one.put("age", 33);
        }

        String json = JSON.serialize(cursor)

        return json;
    }   
4

3 に答える 3

2

データベースに変更を保存せずに結果に属性を挿入するだけの場合は、次の実装をお勧めします。

public String getJSONString(int id) {     
    DBCollection collection = database.getCollection("collection");
    DBObject query = new BasicDBObject("id", id);

    List<DBObject> objects = collection.find(query).toArray();       
    for (DBObject obj : objects) {
        obj.put("age", 33);
    }

    return JSON.serialize(objects)
}

この方法で実装する場合、すべてのオブジェクトをメモリに保持する必要があることに注意してください。

ifところで:元の投稿(の代わりに)でカーソルをループしませんwhile。さらに、カーソルは常にfinally ブロックで閉じられる必要があります。

于 2012-10-31T12:57:02.733 に答える
0

既存のクエリ用であるため、カーソルが新しいプットで更新されるかどうかは疑問です。

編集: 新しい値を追加するには、2 つのソリューションをお勧めします。

  1. JSON ドキュメントを POJO にマップしてから、適切なセッターを呼び出します。これは、よりクリーンで拡張可能なアプローチです。
  2. 値を Map にコピーしてから、この場合は age:33 である最後の key:value を追加します。

更新されたobjを保存するため

saveでコールしていませんcollection

詳細については、Mongo ドキュメントのオブジェクトの保存を参照してください。特に、更新について説明している最後の部分を参照してください。

于 2012-10-31T10:03:53.520 に答える
0

これは、ArrayListを使用して、最終的に機能させる方法です。

        public String (int id){     
            DBCollection collection = database.getCollection("collection");
            BasicDBObject query = new BasicDBObject();
            query.put("id", id);

            ArrayList<DBObject> al = new ArrayList<DBObject>();     
            while(cursor.hasNext()){
                DBObject one = cursor.next();        
                one.put("age", 33);
                al.add(one);
            }       

            String json = JSON.serialize(al)

            return json;
        }
于 2012-11-01T07:36:46.347 に答える