使用pyMongo和MongoEngine从带有索引的MongoDb列表中删除对象?

问题描述

我的 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 = )

但我无法让它工作。你能帮我吗?

解决方法

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]}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...