使用 pyMongo 和 MongoEngine 从 MongoDb 列表中删除对象及其索引?
Posted
技术标签:
【中文标题】使用 pyMongo 和 MongoEngine 从 MongoDb 列表中删除对象及其索引?【英文标题】:Removing an object from a list in MongoDb with its index using pyMongo and MongoEngine? 【发布时间】:2021-03-30 00:31:15 【问题描述】:我的 MongoDB 数据库中有一个文档,其中包含参考字段列表:
class US(Document):
name = StringField(required=True, max_length=200)
timestamp = StringField(required=True, max_length=50)
list = ListField(ReferenceField(Stk))
现在,我想从该列表中删除某个索引 (i=15)。我尝试了类似的东西
US.objects(id=us.id).update(pull__list = )
但我无法让它工作。你能帮帮我吗?
【问题讨论】:
【参考方案1】:MongoDB 不支持在单个操作中删除特定列表元素(除非它是第一个或最后一个元素 - 使用 $pop
)。
但是python的pop
确实允许这样做,所以你可以这样做:
from pymongo import MongoClient
db = MongoClient()['mydatabase']
db.mycollection.insert_one('array': [x for x in range(20)])
document = db.mycollection.find_one()
array = document['array']
array.pop(15) # Remove element at index 15
db.mycollection.update_one('_id': document['_id'], '$set': 'array': array)
print(db.mycollection.find_one())
给予:
'_id': ObjectId('5fde48b597315f732fb0a1d1'), 'array': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19]
【讨论】:
以上是关于使用 pyMongo 和 MongoEngine 从 MongoDb 列表中删除对象及其索引?的主要内容,如果未能解决你的问题,请参考以下文章
使用 pyMongo 和 MongoEngine 从 MongoDb 列表中删除对象及其索引?
Flask,Pymongo和Mongoengine - ImportError:无法导入名称'app'
如何在 mongoengine/pymongo 中设置固定字段
MongoDB:运行更快的查询,这更好 Pymongo 或 MongoEngine