我在帖子模型中嵌入了评论。我正在使用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],
...
});
答案 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
样品
> 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
}