8

MongoDB で mongoengine を使用しています。タプル (merchant_id、order_id、event_type) が一意のキーでなければならないドキュメントを作成する必要があります。

これまで、私は常に2つの分野に限定された独自性を扱ってきました。したがって、次の作品 -

merchant_id = StringField(required = True)
order_id = StringField(required = True, unique_with = 'merchant_id')

今、私は3つのフィールドに対してこれをやろうとしています -

merchant_id = StringField(required = True)
order_id =  StringField(required = True)
event_type = StringField(
    required = True,
    unique_with = ['merchant_id', 'order_id'])

しかし、これはうまくいきません。モジュールでエラーが発生しません。しかし、データを次のように入力すると-

merchant_id = 'Merchant1'
order_id = 'Order1'
event_type = 'Event1'

merchant_id次に、同じでorder_idあるが異なる別のデータを追加しようとするとevent_id、重複キーであるというエラーが発生します。

私も試しました:

merchant_id = StringField(required = True)
order_id =  StringField(required = True)
event_type = StringField(
    required = True,
    unique_with = ('merchant_id', 'order_id'))
4

2 に答える 2

7

クラスのメタ辞書でインデックスを指定できます

meta = {
    'indexes': [
        {'fields': ('merchant_id', 'order_id'), 'unique': True}
    ]
}
于 2015-10-21T03:49:16.377 に答える
3

既存のインデックスのパラメーターを変更する場合は、最初にインデックスを削除してから再作成する必要があります。もちろん、重複を含むコレクションに一意のインデックスを作成することはできません。最初に重複を削除するか、'dropDups' インデックス作成オプションを使用する必要があります。

于 2013-01-02T08:03:44.227 に答える