webentwicklung-frage-antwort-db.com.de

(MongoDB Java) $ In ein Array schieben

Ich verwende Mongo 2.2.3 und den Java-Treiber ..... Mein Dilemma, ich muss ein Feld und einen Wert in ein Array schieben, aber ich kann nicht herausfinden, wie das geht. Ein Beispiel meiner Daten:

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

Ich kann in der Shell $ Push:

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

aber wenn ich das in Java übersetze, verwirre ich mein Selbst und schmeiße meine Tastatur an eine Wand.

mein Java-Code (unvollständig und falsch) bisher:

DBObject find = new BasicDBObject("_id", 1);
DBObject Push = new BasicDBObject("$Push", new BasicDBObject(
                        "scores", new BasicDBObject()));
31
notorious.no
DBObject listItem = new BasicDBObject("scores", new BasicDBObject("type","quiz").append("score",99));
DBObject updateQuery = new BasicDBObject("$Push", listItem);
myCol.update(findQuery, updateQuery);
33
Lucas Zamboulis

Seit mongodb-driver 3.1. gibt es eine Builder-Klasse com.mongodb.client.model.Updates mit geeigneten Methoden für jeden Aktualisierungsfall. In diesem Fall wäre das:

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

collection.updateOne(eq("_id", "1"),Updates.addToSet("scores", score));
14
trinity

Wenn Sie mit dem Abfrageformat der Shell vertraut sind, ist es möglicherweise einfacher, JSON.parse zu verwenden, um Ihre DBObject für den $Push zu erstellen:

import com.mongodb.util.JSON;

String json = "{$Push:{scores:{type:'quiz', score:99}}}";
DBObject Push = (DBObject) JSON.parse(json);
12
JohnnyHK

Mit Jongo können Sie wie in der Shell :

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

Wird in Java:

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

Kein schickes DBObject nötig ;-)

6
yves amsellem

MongoDB Java-Treiber können dies vereinfachen. Verwenden Sie jeweils $ anstelle von $ Push.

$ jedes Mongodb-Referenzdokument

Java-Beispiel -

    BasicDBObject addressSpec = new BasicDBObject();
    addressSpec.put("id", new ObjectId().toString());
    addressSpec.put("name", "one");

    BasicDBObject addressSpec2 = new BasicDBObject();
    addressSpec2.put("id", new ObjectId().toString());
    addressSpec2.put("name", "two");

    List<BasicDBObject> list = new ArrayList<>();
    list.add(addressSpec); list.add(addressSpec2);

    UpdateResult updateOne = individualCollection.updateOne(Filters.eq("_id", "5b7c6b612612242a6d34ebb6"), 
            Updates.pushEach("subCategories", list));
1
vashishth