Python:从 mongodb 更新条目字段
Python: update entries field from mongodb
所以我 mongo db
我开始宿舍 docker
并输入几个条目:
(
id - int,
mod - boolean,
data - text,
)
所以我想从我的 data base
和 mod=false
:
中搜索 N 个条目
results = self.dbcol.find({'mod': False}).limit(3)
所以我的结果 return 3 个元素 对于此结果的每个条目,我想将 mod
字段更改为 true
。
这就是我的尝试:
for entry in results:
entry['mod'] = True
这并没有改变我的领域。
您可以使用update_one
update = { "$set": { 'mod': True } }
for entry in results:
self.dbcol.update_one({ _id: entry['_id'] }, update)
如果 N
是一个大数字,则迭代游标不是一种高效的方法。
一种有效的方法是利用 pymongo
的 find_one_and_update
方法并调用它 N
次,从而在 N
很大的情况下保持较低的磁盘使用率。
import pymongo
from pymongo.collection import ReturnDocument
for _ in range(0,N):
returned_document = self.dbcol.find_one_and_update(filter={ 'mod': False }, update={"$set": { 'mod': True }}, return_document=ReturnDocument.AFTER)
# return_document=ReturnDocument.AFTER --> returns modified document after updating it
# return_document=ReturnDocument.BEFORE --> returns original document before updating it
所以我 mongo db
我开始宿舍 docker
并输入几个条目:
(
id - int,
mod - boolean,
data - text,
)
所以我想从我的 data base
和 mod=false
:
results = self.dbcol.find({'mod': False}).limit(3)
所以我的结果 return 3 个元素 对于此结果的每个条目,我想将 mod
字段更改为 true
。
这就是我的尝试:
for entry in results:
entry['mod'] = True
这并没有改变我的领域。
您可以使用update_one
update = { "$set": { 'mod': True } }
for entry in results:
self.dbcol.update_one({ _id: entry['_id'] }, update)
如果 N
是一个大数字,则迭代游标不是一种高效的方法。
一种有效的方法是利用 pymongo
的 find_one_and_update
方法并调用它 N
次,从而在 N
很大的情况下保持较低的磁盘使用率。
import pymongo
from pymongo.collection import ReturnDocument
for _ in range(0,N):
returned_document = self.dbcol.find_one_and_update(filter={ 'mod': False }, update={"$set": { 'mod': True }}, return_document=ReturnDocument.AFTER)
# return_document=ReturnDocument.AFTER --> returns modified document after updating it
# return_document=ReturnDocument.BEFORE --> returns original document before updating it