2016-04-09 16 views
0

Ich habeWie kann ich ein Dokument aus einem Array entfernen?

ein Dokument mit dieser Struktur eingefügt
{ 
    "_id" : ObjectId("5708bf40a86e6f5bd1f45354"), 
    "companyId" : ObjectId("5708bed6a86e6f5bd1f4534f"), 
    "descriptions" : [ 
     { "id" : ObjectId("5708bf40a86e6f5bd1f45351"), "description" : "test" }, 
     { "id" : ObjectId("5708bf40a86e6f5bd1f45352"), "description" : "test1" }, 
     { "id" : ObjectId("5708bf40a86e6f5bd1f45353"), "description" : "test2" } 
    ] 
} 

und jetzt versuche ich das Array zu ändern, indem Sie ein Objekt zu entfernen, die einige Kriterien entsprechen - in diesem Fall muß ich mit einer bestimmten id das Objekt entfernen .

Hier ist, was ich bisher zu tun, ohne Erfolg

public void deleteCustomField(final String descriptionId, final ObjectId companyId){ 
    MongoCollection<Document> collection = setCollection(CUSTOM_FIELDS_COLLECTION); 

    collection.updateOne(and(eq("companyId", companyId), eq("descriptions.id", new ObjectId(descriptionId))), new Document("$unset", new Document("descriptions.description", ""))); 
} 

Dies ist die setCollection Methode

private MongoCollection<Document> setCollection(final String collectionName){ 
    return db.getCollection(collectionName); 
} 

Die updateOne gar nichts tut. Ich weiß, dass meine Anfrage seltsam aussieht, aber ich kann nicht verstehen, was vor sich geht und wie man das Dokument aus dem Array entfernt. Ich versuchte es auch mit $pull, aber ich hatte überhaupt kein Glück.

Ich weiß, dass mir hier etwas Kleines und wirklich Grundlegendes fehlt, aber als MongoDB-Anfänger kann ich es nicht erkennen.

Können Sie mir einen Schub geben?

Antwort

1

Sie können versuchen, new Document("$unset", new Document("descriptions.description", "")) von new Document("$pull", new Document("descriptions.id", new ObjectId(descriptionId))) zu ersetzen. Siehe das Dokument für die pull operator.

+0

Danke für die Antwort, nach ein paar gute Dokumentation gelesen habe ich es geschafft, es zum Laufen zu bringen. – Slim

+0

Gern geschehen. Funktioniert meine Lösung? Wenn Sie etwas anderes gefunden haben, das besser zu dem passt, was Sie wollten, fügen Sie es bitte als Antwort hinzu. – tartard

Verwandte Themen