1
保存されます。私はこのような単純なドキュメント、定義されたStringFieldがユニークとして定義されていますが、重複が黙っ
class Company(Document):
screen_name = StringField(max_length=100, required=True, unique=True)
official_name = StringField(required=False)
meta = {
'indexes': [{'fields': 'screen_name', 'unique': True}]
}
を私はテスト
@use_tdb
def test_company3():
""" test company2 """
company = Company(screen_name='asdasd')
company.save()
company = Company(screen_name='asdasd')
with nt.assert_raises(OperationError):
company.save()
pprint([(x.id, x.screen_name,) for x in Company.objects.all()])
を書いていたときにそれが実際にそれらの両方を節約できます。そして私は出力で見る:
[(ObjectId('4f719f915c121a21ad000003'), u'asdasd'),
(ObjectId('4f719f915c121a21ad000004'), u'asdasd')]
私は間違って何をしましたか?
ありがとうございます。
ありがとう、@アンカ、それは動作します!しかし、私はちょっと混乱しました。各テストでは、すでに各テストの前と後にすべてのコレクション( 'system.indexes'を除く)を削除する私のuse_tdbデコレータがありました。しかし、これは役に立たなかった。そしてmongoシェルから手動でテストDBを落としたとしても、問題はまだ残っていました。私はそれを得ることができません! db.dropDatabase()はdbを永久に削除しないで、次回のテストでmongodbは古いインデックスを選択しますか? –
はい。古い索引は複雑で混乱します。あなたはmongoengineのテストを見ましたか?すべてのテスト開始の最初のコマンドはdrop_collectionです。それは、モンゴルとモンゴブの理解だけです。プロダクションでは使用しない:)。 – Ankhaa
うん、それを持っていた!私は別の質問があります。 QuerySet._reset_already_indexed(document = Company)以外の既存のコレクション(開発またはプロダクションDB)のインデックスを再構築するエレガントな方法はありますか? –