Удаление объекта из списка в MongoDB с его индексом с помощью PyMongo и MongoEngine?

#python #mongodb #pymongo #mongoengine

#python #mongodb #pymongo #mongoengine

Вопрос:

у меня есть документ в моей базе данных 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]}