【问题标题】:How to delete an item in EmbeddedDocumentListField in mongoengine?如何在 mongoengine 中删除 EmbeddedDocumentListField 中的项目?
【发布时间】:2020-10-12 07:58:00
【问题描述】:

这是我的数据结构:

{
house_id : 1,
houseType : "condo" ,
family: [
            {'name': "pete", "gender": "male", etc},
            {'name': "jon", "gender": "male", etc}
        ]
}

如何从 EmbeddedDocumentListField 中删除“pete”?

db = MongoEngine()
db.init_app(app)

class Family(db.EmbeddedDocument):
    name = db.StringField()
    gender = db.StringField()


class House(db.Document):
    house_id = db.IntField(required=True, unique=True)
    housingType = db.StringField(required=True)
    family = db.EmbeddedDocumentListField(Family)


@app.route('/api/del_member/<h_id>/<fam_name>', methods=['DELETE'])
def del_member(h_id, fam_name):
    try:
        h = House.objects.get(house_id=h_id)
        t = h.family.get(name=fam_name)
        return make_response(jsonify(t), 200)
    except Exception:
        return make_response(f'Something went wrong trying to delete '
                             f'Member: {fam_name} in House ID: {h_id}', 500)

我可以选择我感兴趣的项目,但我不能删除它。我试过 .delete() 但出现错误提示

t = h.family.get(name=fam_name).delete()
AttributeError: 'Family' 对象没有属性 'delete'

弹出。

【问题讨论】:

    标签: python-3.x mongodb rest mongoengine flask-mongoengine


    【解决方案1】:

    我找到了解决方案。可能不是最好的,但它有效。希望有人可以改进它。

    @app.route('/api/del_member/<h_id>/<fam_name>', methods=['DELETE'])
    def del_member(h_id, fam_name):
        h = House.objects.get(house_id=h_id).to_json()
        h = json.loads(h)
        family = h['family']
        new_family = family.copy()
    
        for i in range(len(family)):
            name = family[i].get('name')
            if name == fam_name:
                del new_family[i]
                break
    
        House.objects.get(house_id=h_id).update(family=new_family)
        return make_response('', 200)
    

    【讨论】:

      猜你喜欢
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 2021-10-19
      • 2021-09-13
      相关资源
      最近更新 更多