36

私はmongo 2.2.3とJavaドライバーを使用しています。私のジレンマ、フィールドと値を配列に $push する必要がありますが、これを行う方法がわかりません。私のデータのサンプル:

"_id" : 1,
"scores" : [
    {
        "type" : "homework",
        "score" : 78.97979
    },
    {
        "type" : "homework",
        "score" : 6.99
    },
    {
        "type" : "quiz",
        "score" : 99
    }
]

シェルで $push できます:

db.collection.update({_id:1},{$push:{scores:{type:"quiz", score:99}}})

しかし、これをJavaに翻訳するとき、私は自分自身を混乱させ、キーボードを壁に投げつけます。

これまでの私のJavaコード(不完全で間違っています):

DBObject find = new BasicDBObject("_id", 1);
DBObject push = new BasicDBObject("$push", new BasicDBObject(
                        "scores", new BasicDBObject()));
4

5 に答える 5

34
DBObject listItem = new BasicDBObject("scores", new BasicDBObject("type","quiz").append("score",99));
DBObject updateQuery = new BasicDBObject("$push", listItem);
myCol.update(findQuery, updateQuery);
于 2013-03-15T15:47:23.337 に答える
21

各更新ケースに適切なメソッドを持つmongodb-driver 3.1.ビルダー クラスがあるため。com.mongodb.client.model.Updatesこの場合、これは次のようになります。

Document score = new Document().append("type", "quiz")
                               .append("score",99);

collection.updateOne(eq("_id", "1"),Updates.addToSet("scores", score));
于 2016-10-29T11:28:19.910 に答える
12

シェルのクエリ形式に慣れている場合は、次のように構築する方が簡単であることに気付くかもしれませJSON.parseん。DBObject$push

import com.mongodb.util.JSON;

String json = "{$push:{scores:{type:'quiz', score:99}}}";
DBObject push = (DBObject) JSON.parse(json);
于 2013-03-15T15:53:53.480 に答える
6

Jongo を使用すると、シェルと同じように実行できます。

db.collection.update({_id:1},{$push:{scores:{type:"quiz", score:99}}})

Javaになる:

collection.update("{_id:1}").with("{$push:{scores:{type:#, score:#}}}", "quiz", 99);

派手な DBObject は必要ありません ;-)

于 2013-03-16T21:37:01.970 に答える