2016-04-09 9 views
0

は、私はいくつかの条件に一致されているオブジェクトを削除することにより、配列を変更しようとしているアレイから文書を削除するにはどうすればよいですか?

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

なしこれはupdateOneは全く何もしないsetCollection方法

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

で、私はこれまでやっているものです。私はクエリが奇妙に見えていることは知っていますが、何が起きているのか、またアレイからドキュメントを削除する方法を理解できません。私も$pullで試しましたが、私は運が全くありませんでした。

私はここで何か小さくて本当に基本的なことが分からないことを知っていますが、MongoDBの初心者として、私はそれを見つけることができません。

私にプッシュを与えることはできますか?

答えて

1

あなたは new Document("$pull", new Document("descriptions.id", new ObjectId(descriptionId)))によって new Document("$unset", new Document("descriptions.description", "")) を交換しようとするかもしれません。 pull operatorのドキュメントをご覧ください。

+0

答えをありがとう、いくつかの良い文書を読んだ後、私はそれを動作させることができました。 – Slim

+0

ようこそ。私のソリューションは機能していますか?あなたが望むものに合ったものを見つけたら、それを答えとして加えてください。 – tartard

関連する問題