如何在pymongo中删除嵌套文档

时间:2019-06-03 19:52:33

标签: python mongodb pymongo

我正在开发产品开发数据库。每个产品都包含多个项目和服务。每个项目都有几个属性,我有一个项目集合。因此,我与许多人有许多关系。

我要删除产品内的商品。

我尝试了$pull,但进行了更新,但没有任何运气。 据我了解,我需要先查找文档,然后使用$pull删除嵌套的文档。

这是我的更新路线:

main.route("/Producto/<string:prd_id>/<string:itm_id>/Borrar" , methods= ['GET','POST'])
@login_required
def borraprditm(prd_id,itm_id):
if request.method == 'POST':
    productos.update_one({'comp':usuario['comp_id'],"prd:id":prd_id},{ "$pull": {"items.itm_id":  {"itm_id": itm_id}}})
    flash('El Elemento ha sido eliminado', 'danger')
    return redirect(url_for('main.producto'))
return render_template('prditmdelete.html')

这是我的文档

_id  : 5cf572fc341026b937931734
comp : 13847
codigo : "prueba"
descripcion : "prueba 2"
um : "Prd"
cantidad : 0
precio : 0
prd_id : "0344131"
items :Array 

  0 : Object
  _id : 5cf18a08cf6ea6c98dd7861e
  comp : 13847
  codigo : "750-881"
  descripcion : "PFC 1Mb, CoDeSyS 2.3 - Mca WAGO"
  um : "Pza"
  precio : 1234
  itm_id : "0645566"

  1 : Object
  _id : 5cf18a13cf6ea6c98dd7861f
  comp : 13847
  codigo : "750-8202"
  descripcion : "PFC-200 Linux"
  um : "Pza"
  precio : 3453
  itm_id : "0915059"

  2 : Object
  _id : 5cf18a20cf6ea6c98dd78620
  comp : 13847
  codigo : "jack"
  descripcion : "tapa belden nodo"
  um : "Pza"
  precio : 20
  itm_id : "0918133"

1 个答案:

答案 0 :(得分:0)

您需要告诉$pull要从哪个数组提取,然后告诉如何找到要提取的子文档:

{"$pull": {"items": {"itm_id": itm_id}}}

这意味着:

  • 对于每个与查询匹配的文档,
  • 从“项目”数组中拉出
  • 与子查询{"itm_id": itm_id}相匹配的所有子文档

查看更多详细信息和示例on the MongoDB documentation