Как удалить вложенный документ в pymongo - PullRequest
0 голосов
/ 03 июня 2019

Я работаю над БД по разработке продуктов.Каждый товар состоит из нескольких предметов и услуг.Каждый элемент имеет несколько свойств, и у меня есть коллекция элементов.Таким образом, у меня много ко многим отношений.

Я хочу удалить элемент внутри продукта.

Я попробовал $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 голосов
/ 03 июня 2019

Вам нужно указать $pull из какого массива извлечь, а затем как найти поддокумент для извлечения:

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

Это означает:

  • для каждого документа, соответствующего запросу,
  • извлечение из массива "items"
  • любые поддокументы, которые соответствуют подзапросу {"itm_id": itm_id}

См. Более подробную информацию и примеры в документации MongoDB

...