我是一名Mongoose文档 (Mongoose 5.4.13, mongoDB 4.0.12):
var SkillSchema = new mongoose.Schema({
skill: { type: String },
count: { type: Number, default: 0 },
associatedUsers: [{ type : mongoose.Schema.Types.ObjectId, ref: 'User' }]
});
我将其翻译如下:
我更新的内容如下:
var query = { skill: req.body.skill };
var update = { $addToSet: { associatedUsers: req.params.id } };
var options = { upsert: true, new: true, setDefaultsOnInsert: true };
await skillSchema.findOneAndUpdate(query, update, options);
在此更新期间,我希望同时更新
count
的值,使其等于associatedUsers
的长度。理想情况下,我希望这与更新其他字段同时发生(即不是在随后的更新中),可以通过预钩子或在
findOneAndUpdate
中完成。我尝试在模式定义后使用预钩子:
SkillSchema.pre('findOneAndUpdate', async function(){
console.log("counting associated users");
this.count = this.associatedUsers.length;
next();
});
除了在我的UPDATE路由中使用聚合外:
await skillSchema.aggregate([{ $project: { count: { $size: "$associatedUsers" } } } ])
但我无法让它们两个都正常工作。
请问有什么建议可以帮助我实现这个功能?