mongoDb Array Updaten oder Insert

jimb0p

Erfahrenes Mitglied
Hallo Zusammen,

ich möchte ein Array von einem Dokument in meiner mongoDB updaten sofern dort die entsprechenden Daten schon enthalten sind, bzw. ersetzen. Wenn in dem Array die Daten noch nicht vorhanden sind, dann sollen sie hinzugefügt werden. Es würde auch gehen die vorhandenen Daten zu löschen und dann gegen die neuen auszutauschen.

So sieht das Dokument in der Datenbank aus:

Code:
{
    "_id" : ObjectId("57c73d28b61b482f5884a729"),
    "complete" : true,
    "han" : "12345-678",
    "matchingHan" : "12345678",
    "availabilities" : []
}

Und das ist der Code zum updaten:

Java:
public void updateAvailabilities(Product product){
        UpdateOptions options = new UpdateOptions();
        options.upsert(true);
        ArrayList<SizeInfos> tmpSizeInfos = product.getSizeRunAvailability();
        for (int i = 0; i < tmpSizeInfos.size(); i++) {
            Document updateSet = new Document();
            updateSet.put("$addToSet", tmpSizeInfos.get(i));
            Document availDoc = new Document();
            availDoc.put("availabilities", updateSet);
            prodCollection.updateOne(eq("matchingHan", helper.getMatchingHan(product.getHan())), availDoc, options);
        }
    }

Ich bekomme aber immer folgende Exception:

Code:
java.lang.IllegalArgumentException: Invalid BSON field name availabilities

Habe diese Lösung hier her. Mich würde auch interessieren wenn das Problem gelöst ist, ob ich alle availabilities auf einmal updaten kann anstatt jedes einzeln zu updaten.

Beste Grüße!
 

jimb0p

Erfahrenes Mitglied
Fehler dann doch selbst gefunden, hier waren updateSet und availDoc vertauscht. Korrekt muss es so aussehen in der for-Schleife:
Java:
Document availDoc = new Document("availabilities", availabilities.get(i));
Document updateSet = new Document("$addToSet", availDoc);
prodCollection.updateOne(eq("matchingHan", matchingHan), updateSet);