我如何 replace/update MongoDB 数据库中集合的 mongoengine ListField 的元素? (在python)

How do I replace/update an element of mongoengine ListField of a collection in a MongoDB database? (in python)

我刚刚开始学习 MongoDB 查询,我已经尝试了几个小时来执行以下操作: 我有一个 class 定义为

   class Uni(mongoengine.Document):
       instruments =mongoengine.ListField(mongoengine.ReferenceField(Instrument))

其中 Instrument 是另一个 Document 对象。现在我想在 ListField 中找到对 Instrument 对象“old_instrument”的特定引用,并将该引用替换为对“new_instrument”的引用。我一直在尝试以下操作:

Uni.objects(instruments=old_instrument).update(**{"set__$":new_instrument})

有人可以帮助我并详细说明解决方案吗?非常感谢!

所以我找到的解决方案是先从数据库中读取数组,然后修改它并更新回数据库。好像没有直接查询的解决办法。

    for u in Uni.objects(instruments=old_instrument):
        instr_array=u['instruments']
        instr_array=[new_instrument if x == old_instrument else x for x in instr_array]
        Uni.objects(name=u.name, date=u.date).update_one(upsert=True, instruments=instr_array)