我有一个带有嵌入式注释的简单博客模式,它以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 findCommentsById(id,option,callback){

    var id;
    try {
         id = mongoose.Types.ObjectId(id);
    } catch(e) {
        return callback(e, null);
    }

    BlogModel.findById(id,{'comments':{ $slice: [ option.skip ,option.limit] }},{'sort':{'comments.date':1}},function(err, comm) { 
        if(err){callback(err, null);}
        else{
            console.log("findCourseCommentsById".red,comm);
            callback(null, comm);
        }      
    })

}

第一个问题是当我返回嵌入式数组的前两个条目时,使用slice可以检索前两个注释,但是如何按日期排序注释,{'sort':{'comments.date':1似乎不起作用 . 它还给我一个完整的文件,但实际上我真正需要的只是回复我的评论

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

    var options = { new: false, select: 'comments' };         
    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);
        }
    })  
}

另一个问题与findOneAndUpdate的使用有关,当文件得到更新时,回调会返回一个文件,在某些情况下返回带有完整文档的响应是昂贵的,我想要的是当我更新时,它没有给出我的回应 . 我见过mongodb,它说它是可能的,但是当涉及到猫鼬时,我还没有看到任何关于更新时不返回文档的内容 .

所以我在findOneAndUpdate,Model.findByIdAndUpdate(id,[update],[options],[callback])上回到了mongoose doc,[options]有一个select字段,允许我返回所选字段/部分文档 . option = {select:'id '},这样可行,但是如果我想为了优化而不返回任何内容,请选择空白,例如option = {select:' '}, this doesn' t work并将返回一个完整的doc .