正在更改findOneAndUpdate中的响应文档对象



假设我得到了这个小代码块:

 Room.findOneAndUpdate({ Roomid: roomid }, { $push: { UsersMeta: UserMeta}}, { new: false }, function (err, room) {
    if (err) console.log(err);
    console.log('room output:');        
    console.log(room);
    client.emit('others', room);
 })  

它正在数据库中搜索一个文档,对其进行更新,然后将处于预更新状态的room文档发送回客户端。我需要的是对响应的room进行一些更改,特别是删除那些_id、__v,以及可能的文档的任何其他自定义部分。

我想做的事:

创建架构时使用toObject.transform

var RoomSchema = mongoose.Schema({
Roomid: { type: String, unique: true },
///stuff///
});
RoomSchema.options.toObject.transform = function (doc, ret, options) {
// remove the _id of every document before returning the result
delete ret._id;
}

失败:收到cannot set property 'transform' of undefined错误。

将提到的代码块更改为:

 Room.find({ Roomid: roomid })
.update({ $push: { UsersMeta: UserMeta} })
.select({ _id: 0 })
.exec(function (err, room) {
    if (err) console.log(err);
    console.log('room output:');
    console.log(room);
    client.emit('others', room);
})

失败:room输出中始终收到[]。

现在,我停止了在Schema声明上手动设置{_id: false},从一开始就完全摆脱了_id。由于我想对房间使用自定义随机id,所以我似乎不需要这些_id。然而,我不确定这样的治疗是否会造成一些不愉快的后果
此外,可能需要将一些非_id文档属性排除在响应之外的问题对我来说是一个未解之谜

感谢您的关注。

您可以执行以下操作,它应该可以工作;

RoomSchema.set('toJSON', {
   transform: function (doc, ret, options) {
     delete ret._id;
     delete ret.__v;
   }
}); 

最新更新