10

我在帖子模型中嵌入了评论。我正在使用猫鼬。在帖子中推送新评论后,我想访问新添加的嵌入式评论的 id。不知道如何得到它。

这是代码的样子。

var post = Post.findById(postId,function(err,post){

   if(err){console.log(err);self.res.send(500,err)}

   post.comments.push(comment);

   post.save(function(err,story){
       if(err){console.log(err);self.res.send(500,err)}
           self.res.send(comment);
   })


});

在上面的代码中,没有返回评论的id。请注意,在数据库中创建了一个 _id 字段。

架构看起来像

var CommentSchema = new Schema({
  ...
})

var PostSchema = new Schema({
    ...
    comments:[CommentSchema],
    ...
});
4

3 回答 3

9

文档的_id值实际上是由客户端而不是服务器分配的。因此_id,新评论在您致电后立即可用:

post.comments.push(comment);

推送到的嵌入式文档将在添加时post.comments为其_id分配,因此您可以从那里拉取它:

console.log('_id assigned is: %s', post.comments[post.comments.length-1]._id);
于 2012-11-02T12:46:35.630 回答
7

您可以手动生成 _id,然后您不必担心以后将其拉回。

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
于 2017-10-29T16:27:51.230 回答
1

_id字段在客户端生成,您可以通过以下方式获取嵌入文档的 idcomment.id

样本

 > var CommentSchema = new Schema({
     text:{type:String}
  })

 > var CommentSchema = new mongoose.Schema({
     text:{type:String}
 })

 > var Story = db.model('story',StorySchema)
 > var Comment = db.model('comment',CommentSchema)
 > s= new Story({title:1111})
   { title: '1111', _id: 5093c6523f0446990e000003, comments: [] }
 > c= new Comment({text:'hi'})
   { text: 'hi', _id: 5093c65e3f0446990e000004 }
 > s.comments.push(c)
 > s.save()

在 mongo db shell 中验证

    > db.stories.findOne()
{
    "title" : "1111",
    "_id" : ObjectId("5093c6523f0446990e000003"),
    "comments" : [
        {
            "_id" : ObjectId("5093c65e3f0446990e000004"),
            "text" : "hi"
        }
    ],
    "__v" : 0
}
于 2012-11-02T13:15:14.910 回答