3

MongoEngineを使用したドキュメントと埋め込みドキュメントがあります

class Sub(EmbeddedDocument):
    Id = StringField()
    User = StringField()
    Value = StringField()


class Main(Document):
    Value = StringField
    Values = ListField(EmbeddedDocumentField(Sub))

メインの「値」フィールドに新しい埋め込みドキュメントを追加すると、コレクションではなくリストに一意のIDが生成されます。メインの「値」にはそれぞれ異なるユーザーからの複数のサブが存在する可能性があります。MongoEngineにアトミックに削除させようとしています。 IDとユーザーに基づくリストの「サブ」値。

メインに対してselectを実行し、次にサブ自体に対してupdate_oneを実行しようとしました。

Main.objects(id=main_id).update_one(pull__values__id=sub_id) 

しかし、これが返すように見えるのは、配列内のインデックスだけです。Mainをプルし、Valuesを調べて要素を見つけて削除できることはわかっていますが、プル、反復、更新プロセス中にサブに何かが追加される可能性を減らして、このアトミックを維持しようとしています。

4

1 に答える 1

6

EmbeddedDocumentクラスを使用して渡すだけですsub_id

Main.objects(id=main_id).update_one(pull__values__id = Sub(Id=sub_id).Id )
于 2012-05-13T00:50:53.887 に答える