0

したがって、次のようなドキュメントがあります。

[
{
    "_id" : ObjectId("52774aa8036473112ef715eb"),
    "humans" : [
        {
            "name" : "WTF",
            "serviceUsers" : [
                {
                    "username" : "someoneelse",
                    "serviceID" : "abcdefghijklmnop",
                    "service" : "twitter",
                    "onBehalfOf" : "WTF-test"
                }
            ]
        }
    ],
    "password" : "r4fp+7glE/qR3VJuP7Jlvt6pEx4thssi503O8CfFAK1HJEB1F1bIkDHaf+6LHDbm",
    "services" : [
        {
            "twitter" : [ ]
        }
    ],
    "username" : "darthjulian",
    "version" : NumberLong(1)
}
]

その配列servicestwitter要素が空であるため、要素を削除したい。

次を使用して、ドキュメントを正常にクエリできます。

> db.users.find({'services.twitter': []}).toArray()

したがって、updateプロトタイプを使用して:

db.collection.update( { field: <query> }, { $pull: { field: <query> } } );

その要素を$pull試してみましたが、ドキュメントは変更されません。

シェルでの私のコマンドは次のとおりです。

> db.users.update({'services.twitter': []}, {$pull: {'services.twitter': []}})

プロトタイプに基づいて、それは簡単に見えます — クエリは検索を使用して動作しますが、$update の間はエラー メッセージも含めて何も起こりません。

手がかりはありますか?

4

1 に答える 1

1

で指定されたフィールドは、$pull変更しようとしている配列である必要があるため、この場合は次のようになりservicesます。

db.users.update({'services.twitter': []}, {$pull: {services: { twitter: []}}})
于 2013-11-04T16:57:35.130 に答える