10

私の主な懸念は$elemMatch、配列から要素を検索してプルするコマンドを使用するmongodbドキュメントについてですが、これは私が使用すると機能しません。私の文書構造は

{
"_id" : ObjectId("55dea445c3ad8cac03a7ed8e"),
"email" : "james@user.com",
"groups" : [ 
    {
        "_id" : ObjectId("55dea4a4c3ad8c8005a7ed8f"),
        "name" : "All Group"
    }
]}

mongodb クエリを使用して、ドキュメントからグループを削除したいと考えています。私のクエリは次のとおりです。

db.users.update({"_id": ObjectId('55dea445c3ad8cac03a7ed8e')}, 
{$pull: {"groups": {$elemMatch: {"_id": ObjectId('55dea4a4c3ad8c8005a7ed8f')}}}})

クエリを実行した後、ユーザー ドキュメントは更新されず、グループ値はまだそこにあります。私はmongodbのドキュメントに従っています:http://docs.mongodb.org/v2.6/reference/operator/update/pull/

4

1 に答える 1

17

は必要ありませ$elemMatch$pull。その引数は、基本的に配列自体に対する「クエリ」です。

db.users.update(
    {"_id": ObjectId('55dea445c3ad8cac03a7ed8e')}, 
    { "$pull": { "groups": {"_id": ObjectId('55dea4a4c3ad8c8005a7ed8f')}}}
)

そのため、配列のサブドキュメント要素で独自の引数がクエリとして扱われるクエリ内で動作$pullするように機能します。$elemMatch

配列全体を見るドキュメントの「クエリ」部分とは異なり、個々の配列要素をすでに見ています。

于 2015-08-27T06:52:23.587 に答える