0

だから、私は多くの埋め込みドキュメントを使用するアプリケーションを持っていますが、これは問題ありません。show collectionsただし、Mongo シェルでは一部の埋め込みドキュメントが表示されないことに気付きました。

通常、これは問題ではありませんが、埋め込みドキュメントの設定をいじっているときに、誤ってエントリの 1 つに空のエントリを追加してしまいました。私は通常、エントリを削除するためにこのようなことをしますdb.collection.remove({_id: ObjectId('<OBJECT_ID>')})が、これらのいくつかは実際のコレクションではないため、このようにすることはできません.

また、実際にドキュメントを削除しているときに、これをうまくつなぎ合わせる方法もわかりません。エントリからスプライスすることはできますが、埋め込まれたドキュメントが DB のどこかに浮かんでいるような気がします。

これを行う方法はありますか?

私が話していることを理解してもらうために、エントリの例を示します。

entry = {
    _id: ObjectId('blah blah blah'),
    name: {
        first: 'example',
        last: 'city'
    },
    log : [
        {
            _id: ObjectId('some id'),
            action: 'whatever',
            someField: 'etc.'
        },
        {
            _id: ObjectId('another id')
        },
        {
            _id: ObjectId('yet another id'),
            action: 'who cares',
            someField: 'data'
        }
    ]
}
4

1 に答える 1

1

ログ エントリの 1 つを削除する場合は、$pull operatorが必要です。

形式は次のようになります。

db.collection.update({_id:<id-of-document-to-update>},
                     {$pull:{"log._id":<id-of-log-entry-to-remove>"}}
)

これは、特定のドキュメントを見つけて_id、ログ配列から特定のエントリを削除することを意味しますsub_id

于 2013-06-25T15:43:34.310 に答える