2

「ノード」の配列のサブオブジェクトがあります

これが私のMongoドキュメント構造です

db.nodes.find()
{   _id : ObjectId("skipped"),
nodeid : "node1"
nodes : [
    {   nodeid : "node11"
        sku : [
            "aaa",
            "bbb",
            "ccc"]
    },
    {   nodeid : "node12"
        sku : [
            "bbb",
            "ddd"]
    }]
}
{   _id : ObjectId("skipped"),
nodeid : "node2"
nodes : [
    {   nodeid : "node21"
        sku : [
            "aaa",
            "bbb",
            "ddd"]
    }]
}

私が使う:

db.nodes.update({'nodes.sku': 'bbb'},{$pull: {'nodes.$.sku':'bbb'}}, {multi: 1})

結果があります:

db.nodes.find()
{   _id : ObjectId("skipped"),
nodeid : "node1"
nodes : [
    {   nodeid : "node11"
        sku : [
            "aaa",
            "ccc"
        ]
    },
    {   nodeid : "node12"
        sku : [
            "bbb",
            "ddd",
        ]
    }
]
}
{   _id : ObjectId("skipped"),
nodeid : "node2"
nodes : [
    {   nodeid : "node21"
        sku : [
            "aaa",
            "ddd"
        ]
    }
]
}

「node1.node12」にはまだオブジェクト「bbb」があります

私は使用してみます:

db.nodes.update({'nodes': {$elemMatch: {'sku':'bbb'}}},{$pull: { nodes: {'sku':'bbb'}}}, {multi: 1})

そして結果があります:

db.nodes.find()
{   _id : ObjectId("skipped"),
nodeid : "node1"
nodes : [
]
}
{   _id : ObjectId("skipped"),
nodeid : "node2"
nodes : [
    {   nodeid : "node21"
        sku : [
            "aaa",
            "ddd"
        ]
    }
]
}

「node1」のすべてのデータを失いました

「node2.node12」からのプルオブジェクトを修正します

いくつかの提案

ありがとう、ヴァシリ

4

1 に答える 1

2

残念ながら、あなたがやりたいことはまだサポートされていません。投票したい場合は、機能リクエスト チケットがここにあります。

https://jira.mongodb.org/browse/SERVER-1243

それまでの間、いくつかのオプションがあります。

  1. ドキュメントを再設計します。モデル ツリー構造への一般的なパターンのリンクは次のとおりです: http://docs.mongodb.org/manual/tutorial/model-tree-structures/

  2. 現在の設計を続行して複数の更新を実行するか、検索を実行し、アプリケーションのノード配列を変更して複数の更新を実行します。これらのシナリオでは、1 つのドキュメント内のすべての変更をアトミックに行うことはできないことに注意してください。

于 2013-07-22T03:55:34.677 に答える