es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo eliminar un solo elemento de un documento de mongoDB?

Tengo este código:

from admin import *
grab_data = tasks_collection.find()

class Habits:
def init(self):
self.default = False
self.habits = {}

def add_habit(self, habit_name, habit_difficulty=0):
self.habits[habit_name] = [self.default, habit_difficulty]

def remove_habit(self, habit_name):
del self.habits[habit_name]

def plus_habit(self):
pass

def minus_habit(self):
pass

def add_data(self):
habits_collection.insert_one(self.habits)

class Tasks:
def init(self):
self.default = False
self.tasks = {}

def add_task(self, task_name, task_difficulty=0):
if task_name not in self.tasks:
self.tasks[task_name] = [self.default, task_difficulty]
else:
print(f”Task ‘{task_name}’ already exists.”)

def show_task(self):
return self.tasks

def remove_task(self, task_name):
del self.tasks[task_name]

def add_data(self):
tasks_collection.insert_one(self.tasks)

task = Tasks()

task.add_task(“clean room”)

task.add_task(“study”)
task.add_task(“study”)

task.add_task(“be lazy”)
task.add_data()

Lo cual básicamente se usa para crear un diccionario de tareas por hacer y luego agregarlas a mi base de datos. Hasta aquí todo bien. Pero, ¿cómo puedo eliminar una sola tarea de la base de datos? Cuando leo los datos desde la base de datos obtengo esto:

{‘_id’: ObjectId(’61a60bbd13d0ccf4e9bb300d’), ‘clean room’: [False, 0], ‘study’: [False, 0], ‘be lazy’: [False, 0]}

He intentado eliminarlo así:

for data in grab_data:
for key, value in data.items():
if key == “be lazy”:
tasks_collection.delete_one({key: value})

Pero elimina todo el diccionario. ¿Cómo puedo eliminar solo “be lazy”?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para eliminar solo la tarea “ser perezoso” de la base de datos, puede usar el siguiente código:

    tasks_collection.delete_one({"be lazy": {"$exists": True}})
    

    Esto buscará un documento donde exista el campo “ser perezoso” y luego eliminará ese campo del documento.

Comments are closed.