Mongodb,获取新推入的嵌入对象的id

时间:2012-11-02 12:29:24

标签: mongodb mongoose

我在帖子模型中嵌入了评论。我正在使用mongoosejs。在帖子中推送新评论后,我想访问新添加的嵌入评论的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。请注意,在db。中创建了一个_id字段。

架构看起来像

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

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

3 个答案:

答案 0 :(得分:6)

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

post.comments.push(comment);

推送到post.comments的嵌入式文档会在添加时_id分配,因此您可以从中提取:

console.log('_id assigned is: %s', post.comments[post.comments.length-1]._id);

答案 1 :(得分:2)

您可以手动生成_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

答案 2 :(得分:1)

在客户端生成

_id字段,您可以通过comment.id

获取嵌入文档的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
}