2012-11-02 24 views
4

我在帖子模型中嵌入了注释。我正在使用mongoosejs。在帖子中推送新评论后,我想要访问新添加的嵌入评论的ID。不知道如何得到它。Mongodb,获取新推入的嵌入对象的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], 
    ... 
}); 
+0

'comment'从哪里来? – JohnnyHK

+0

它是一个json对象,它是在代码的另一部分创建的......在给定的代码之上。 – Pankaj

回答

5

文档的_id价值实际上是由客户端,而不是服务器分配。因此,新评论的_id可以对你打电话后:

post.comments.push(comment); 

嵌入文档推到post.comments将拥有_id分配,因为它的加入,所以你可以从那里拉:

console.log('_id assigned is: %s', post.comments[post.comments.length-1]._id); 
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() 

验证蒙戈DB壳

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

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