次のようなコレクション「testcol」を持つデータベース「testdb」があります。
{u'_id': ObjectId('50eeb8029b75941b9af614bd'), u'birth': 1}
{u'_id': ObjectId('50eeb82e9b75941bc820f22c'), u'birth': 2}
{u'_id': ObjectId('50eeb82e9b75941bc820f22d'), u'birth': 3}
{u'_id': ObjectId('50eeb82f9b75941bce96032c'), u'birth': 2}
{u'_id': ObjectId('50eeb82f9b75941bce96032d'), u'birth': 3}
コードは次のようなものです。
m_connection = MongoClient(M.HOST,M.PORT)
col = m_connection['testdb']['testcol']
#some_operation
cursor = col.find()
for doc in cursor:
print doc
出生数が1より大きいすべてのドキュメントを更新しようとしているので、some_operationを次のように置き換えますcol.update({'birth':{'$gt':1}},{'$set':{'death':'near'}},{'multi':True})
。エラーが発生します。TypeError: upsert must be an instance of bool
同様に、出生が2 0r 3であるすべてのドキュメントのうち1つだけを削除したいのですが、
some_operationを次のように置き換えます。col.remove({'birth' : {'$in' : [2,3]}},{'justOne' : 1})
エラーが発生します。TypeError: Wrong type for safe, value must be a boolean
{}配列の代わりに直接ブール値を使用しようとしましたが、更新されるドキュメントは1つだけで、出生が2または3のドキュメントはすべて削除されます。
それがバージョンと関係がある場合に備えて:私はpymongo-2.4.1とPython2.7を持っています私が間違っているところの手がかりはありますか?どうもありがとう。
編集:ドキュメントには次のように書かれています:update(spec、document [、upsert = False [、manipulate = False [、safe = None [、multi = False [、check_keys = True [、** kwargs]]]]]])
つまり、「multi」= Trueを使用する場合は、その前にあるもの(upsert、manipulate、safe)の値を強制的に定義する必要がありますか?
また、removeの場合、remove([spec_or_id = None [、safe = None [、** kwargs]]])と表示されます。ここで言及されている「justOne」はどこにありますか?