0

MongoDB と Perl を使用しています。ここに私のデータ構造があります:

{
    "_id" : ObjectId("501976f8005c8b541d000000"),
    "err_id" : "err",
    "solution" : [
        {
            "attachment" : "attach",
            "macr" : "macrs",
            "yammer" : "yam",
            "resolution" : "l",
            "salesforce" : "salesforce",
            "username" : "bob"
        },
        {
            "attachment" : "attach",
            "macr" : "macrs",
            "yammer" : "yam",
            "resolution" : "losssss",
            "salesforce" : "salesforce",
            "username" : "bob"
        }
    ]
}

ご覧のとおり、内部にオブジェクトを含む配列があります。Perl MongoDB ライブラリを使用してこれを作成しました。

Perl MongoDB lib で配列を操作するためのいくつかの構文に精通しています。たとえば、これを使用して、ユーザー名が と同じエントリを検索します$username

$users->find({"solution.username" => $username});

要素を削除するのは簡単だと思いました:

$users->remove({"solution.username" => $username});

しかし、残念ながらそうではありません。これを試してプルを使用しましたが、役に立ちませんでした! これを見つけるのに苦労しました。フィールドの内容に基づいて配列要素を削除する構文を知っている人はいますか?

4

1 に答える 1

1

MongoDB :: Collection remove()メソッドは、クエリに一致するドキュメントを削除します。したがって、探しているものではありません。

特定のフィールドを削除するには、$unsetを使用する必要があります。

solution.usernamesは実際には配列内にあるため、削除するフィールドの配列インデックスを含める必要があります。例:

$users->update({"_id" => '123'}, {
   '$unset' => {
       'solution.0.username' => 1,
       'solution.1.username' => 1
   }
});

配列username内で一致するすべてのフィールドの設定を解除するための短い構文はわかりませんが、コマンドに複数のフィールドを追加できます。solutionsolution.#.username$unset

上記の例では、最初の2つのユーザー名エントリを配列から削除します。一致するドキュメントに3つ以上のユーザー名エントリが含まれている場合、この更新を実行するたびに、最大2つのエントリが削除されます(存在する場合)。

于 2012-08-02T07:07:25.793 に答える