9
votes

Mongodb, obtenir l'identifiant de l'objet embarqué nouvellement poussé

J'ai des commentaires intégrés dans un modèle de messages. J'utilise mongoosejs. Après avoir poussé un nouveau commentaire dans un post, je souhaite accéder à l'ID du nouvel commentaire intégré ajouté. Je ne sais pas comment l'obtenir.

Voici comment le code ressemble. xxx

dans le code ci-dessus, l'ID du commentaire n'est pas retourné. NOTE Il y a un champ _id créé dans la base de données.

Le schéma ressemble à xxx


2 commentaires

Où est-ce que commentaire vient?


c'est un objet JSON qui est créé dans une autre partie du code ... au-dessus de celui donné.


3 Réponses :


9
votes

_ID de document est en fait attribué par le client, et non le serveur. Donc le _id du nouveau commentaire est disponible juste après que vous appeliez: xxx

le DOC intégré poussé à post.comments aura _id attribué tel qu'il est ajouté, vous pouvez donc le tirer à partir de là: xxx


1 commentaires

Bien que, il a été marqué comme résolu, mais si l'on utilise si l'on utilise $ poussez pour ajouter le document dans la matrice. Comment récupérer l'identifiant dans ce cas. Exemple: Laisser NewValue = attendre modèle.findonandupdate ({Nom: 'Nouvelle valeur', 'Commentaires.name': {$ NE: NEWCOMMENT.Name}}, {$ PUSH: {Commentaires: NewComment}}, {nouveau : vrai}) .exec ();



1
votes

_ID code> est généré au client, vous pouvez obtenir l'identifiant du document intégré par commentaire.Id code>

échantillon p> xxx Pre>

Vérifiez dans la coque de Mongo DB P>

    > db.stories.findOne()
{
    "title" : "1111",
    "_id" : ObjectId("5093c6523f0446990e000003"),
    "comments" : [
        {
            "_id" : ObjectId("5093c65e3f0446990e000004"),
            "text" : "hi"
        }
    ],
    "__v" : 0
}


0 commentaires

6
votes

Vous pouvez générer manuellement le _id alors vous n'avez pas à vous soucier de le retirer plus tard.

var mongoose = require('mongoose');
var myId = mongoose.Types.ObjectId();

// then set the _id key manually in your object

_id: myId

// or

myObject[_id] = myId

// then you can use it wherever


0 commentaires