6

Javaを使用して配列から要素を削除しようとしていますが、成功していません...

「emailsInApp」コレクションがあり、内部には次のものがあります。

{ "_id" : "750afe", "list" : [ "John@gmail.com", "Mike@gmail.com" ] }
{ "_id" : "711850", "list" : [ "example@gmail.com" ] }

登録された電子メールの ID ごとに保持されます。

私がやりたいことは、ID と電子メールを指定して、その appId からその電子メールを削除することです。

これは私が持っているatmであり、実行しても配列はまったく変更されません:

DBCollection emailsApp = db.getCollection(EmailsInAppColl);
BasicDBObject queryEmail = new BasicDBObject();
queryEmail.put("_id", appId);
BasicDBObject updateEmailCommand = new BasicDBObject();
updateEmailCommand.put("$pull", new BasicDBObject("list", email));
emailsApp.update(queryEmail, updateEmailCommand, true, true);

正しい方向に向けてください。

編集:@Constantineが推奨するように、デバッグすると次のようになります:

DBCollection emailsApp = db.getCollection(EmailsInAppColl);
queryEmail.put("_id", appId);
DBCursor cursor = emailsApp.find(queryEmail);
System.out.println("######*****"+cursor.next());

コンソールで:

#####*****{ "_id" : "711850" , "list" : [ "example@gmail.com" , "peanut@gmail.com" , "chewie@gmail.com" , "gold@gmail.com"]}

検索クエリは正しいですが、アイテムが削除されません...

4

1 に答える 1

7

次のようにしてみてください。

BasicDBObject match = new BasicDBObject("_id", appId); //to match your direct app document
BasicDBObject update = new BasicDBObject("list", email);
coll.update(match, new BasicDBObject("$pull", update));

それはうまくいくはずです。

于 2013-06-12T12:32:29.000 に答える