次のことを行うMongoengineを使用して、DjangoでWeb APIを実行しています
print "Saving", data
modelObj.dataList.append(data)
modelObj.save()
また、この関数を非常にタイトなループで呼び出す API もあり、その結果、次のログが生成されます。
Saving {'answer': u'3'}
[25/Apr/2013 17:12:00] "POST /submit HTTP/1.1" 200 10
Saving {'answer': u'2'}
Saving {Saving {'answer': u'5'}}
[25/Apr/2013 17:12:00] "POST /submit HTTP/1.1" 200 30
[25/Apr/2013 17:12:00] "POST /submit HTTP/1.1" 200 30
[25/Apr/2013 17:12:00] "POST /submit HTTP/1.1" 200 10
Saving {'answer': u'1'}
[25/Apr/2013 17:12:00] "POST /submit HTTP/1.1" 200 10
明らかに、保存は同時に行われています。出力を見ると、5 つの結果すべてがデータベースに書き込まれることはめったにありません。ここで見落としている本当に基本的なものはありますか?
更新: Mongoengine 0.7.9 を使用します。ドキュメントの状態:
Changed in version 0.5: In existing documents it only saves changed fields using
set / unset. Saves are cascaded and any DBRef objects that have changes are saved as well.
これが私の理論を反証するかどうかはわかりません...