我有一个带有嵌入式注释的简单博客模式,它以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的使用有关,当文件得到更新时,回调会返回一个文件,在某些情况下返回带有完整文档的响应是昂贵的,我想要的是当我更新时,它没有& #39;给我一个回复。我看过mongodb,它说它是可能的,但是当谈到猫鼬时,我还没有看到任何关于在更新时没有返回文件的事情。
所以我回到了findOneAndUpdate上的mongoose doc,Model.findByIdAndUpdate(id,[update],[options],[callback]),[options]有一个select字段,允许我返回选中的字段/部分文件。 option = {select:' _id'},这样可行,但如果我想为了优化而不返回任何内容,请选择空白,例如option = {select:'&# 39;},这不起作用,并会给我一个完整的文档。