La eliminación de los elementos específicos de la matriz con MongoDB

Estoy desarrollando una aplicación web usando Codeigniter y MongoDB.
Los usuarios pueden subir archivos y otros usuarios pueden comentar en ellas.

Almacenar los comentarios en una matriz denominada comentarios en el principal documento de archivo.
Todo esto está bien, pero ¿cómo puedo eliminar comentarios específicos de la matriz?

No puedo utilizar el ID como clave, ya que un usuario puede agregar varios comentarios. ¿Cómo sería
te recomendamos que puedo hacer?

Este es mi comentario de la matriz:

"comments": [
        {
            "user_id": ObjectId("4f240b433dc7937d68030000"),
            "user_name": "james",
            "user_comment": "This is a comment",
            "created_at": "2012-01-2821: 20: 44"
        },
        {
            "user_id": ObjectId("4f240b433dc7937d68030000"),
            "user_name": "mandy",
            "user_comment": "This is another comment",
            "created_at": "2012-01-2821: 31: 07"
        }
    ],

3 Kommentare

  1. 58

    Si puede identificar el comentario artículo por la coincidencia de id de usuario, nombre o comentario — a continuación, puede quitar ese comentario utilizando update() comando con $pull modificador junto con la condición adecuada.

    Si usted no puede hacer como en el anterior, incluyen un identificador único en los comentarios (como UUID).

    A borrar el comentario, haga lo siguiente:

    db.coll.update({<cond to identify document}, {$pull: {'comments': {'name': <name>}}} )

    Si utiliza el id, el cual es el preferido:

    db.coll.update({<cond to identify document}, {$pull: {'comments': {'id': <id>}}} )
    • Suena interesante. Puedo dejar de mongoDB asignar un UUID? Si sí, ¿cómo?
    • Nope. Para los valores dentro del documento, como en este caso, usted necesita para generar UUID. PHP tiene uniqid(), que también se puede utilizar.
    • Gracias por una respuesta detallada. La documentación sobre este son mediocres.
    • pero, ¿cómo puedo agregar un índice de los campos de un objeto de una matriz?
    • Se puede mostrar cómo se puede hacer esto usando Linq para Mongo DB c# ?
    • esto es cómo usted puede hacerlo en c#, Actualización.Pull(«comentarios», de la Consulta.EQ(«_id», nueva ObjectId(feeId)));

  2. 3

    tal vez usted puede eliminar de comentarios por su ‘created_at‘ tiempo, como el tiempo es único.

    $db.coll.update({cond to identify document},{$pull:{'comments':{'created_at':<>}}})
    • Varios usuarios pueden publicar en el mismo segundo, aunque, así que me gustaría generar un identificador único para cada uno de los comentarios.
  3. 0

    Creo que ustedes tienen agregar mongodb id a cada comentario cuando lo inserte. Usted puede crear un nuevo mongodb id como este;

    $comment_id = new MongoID();

    Ahora, usted puede borrar los comentarios por id con $pull + $update como @smoorthy la respuesta.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea