Как удалить документ из массива?

Я вставил документ с этой структурой

{ 
  "_id" : ObjectId("5708bf40a86e6f5bd1f45354"),
  "companyId" : ObjectId("5708bed6a86e6f5bd1f4534f"),
  "descriptions" : [ 
       { "id" : ObjectId("5708bf40a86e6f5bd1f45351"), "description" : "test" },
       { "id" : ObjectId("5708bf40a86e6f5bd1f45352"), "description" : "test1" },
       { "id" : ObjectId("5708bf40a86e6f5bd1f45353"), "description" : "test2" } 
   ]
}

и теперь я пытаюсь изменить массив, удалив объект, соответствующий некоторым критериям - в этом случае мне нужно удалить объект с определенным id.

Вот что я делаю до сих пор, без каких-либо успехов

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", "")));
}

Это метод setCollection

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

updateOne вообще ничего не делает. Я знаю, что мой запрос выглядит странно, но я не могу понять, что происходит и как удалить документ из массива. Я также пробовал с $pull, но мне не повезло.

Я знаю, что мне здесь не хватает чего-то небольшого и действительно простого, но как новичок в MongoDB я не могу этого заметить.

Можешь дать мне толчок?


person Slim    schedule 09.04.2016    source источник


Ответы (1)


Вы можете попробовать заменить new Document("$unset", new Document("descriptions.description", "")) на new Document("$pull", new Document("descriptions.id", new ObjectId(descriptionId))). См. документ для оператора pull.

person tartard    schedule 09.04.2016
comment
Спасибо за ответ, после прочтения хорошей документации мне удалось заставить ее работать. - person Slim; 09.04.2016
comment
Пожалуйста. Мое решение работает? Если вы нашли что-то другое, что лучше соответствует тому, что вы хотели, добавьте его в качестве ответа. - person tartard; 09.04.2016