【问题标题】:can't find _id attribute in the array of mongodb在 mongodb 的数组中找不到 _id 属性
【发布时间】:2013-05-30 04:10:33
【问题描述】:

我有一个嵌入了 cmets 的简单博客架构,它是用 mongoose 建模的

var BlogSchema = mongoose.Schema({
          ...............,
         comments:[Comment],
         visits:int  
});

var Comment = mongoose.Schema({
    name  :  { type: String }
  , img   :  { type:String }
  , date  :  { type: Date, default: Date.now }
  , text  :  String 
});


var BlogModel = mongoose.model('Blog',BlogSchema);

function addComment(bid,name,img,text,callback){

    var options = { new: false };       
    BlogModel.findOneAndUpdate({'_id':bid},{'$push':{'comments':{'name':name,'img':img,'text':text}},'$inc':{'visits':1}},options,function(err,ref){
        if(err) {
            console.log('add addComment'.red,err);
            callback(err, null);
        }else{
            console.log('add addComment  '.green+ref);                
            callback(null,ref);
        }
    })  
} 

当我在博客上发表评论时,博客中的 cmets 数组确实附加了带有 name、img 和 text 属性的新评论。但问题是由于某种原因缺少日期和_id。有了每条评论的_id,就可以重新编辑或删除这条评论,所以_id是很有必要的。

我不知道为什么 date 消失了,因为在架构设计中,date 默认为 new Date,并且不应该错过 _id,因为我不会像这样强制忽略 _id 条目 - mongoose.Schema({ _id:false});

现在我的结果是有线的,有人可以看看有什么问题吗?

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    任何update 调用(例如findOneAndUpdate)都会绕过除强制转换之外的所有Mongoose 功能,例如默认值并将_id 字段添加到新元素。您必须使用 save 样式更改才能触发这些更改。

    【讨论】:

    • 谢谢,约翰尼,现在我明白了
    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    相关资源
    最近更新 更多