将猫鼬文档中的字段设置为数组长度
我有一个猫鼬的文档:
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
的长度。
理想情况下,我希望通过pre-hook或findOneAndUpdate
在更新其他字段的同时(即不在后续更新中)同时发生。
我已经尝试在模式定义之后使用前置钩子:
SkillSchema.pre('findOneAndUpdate', async function(){
console.log("counting associated users");
this.count = this.associatedUsers.length;
next();
});
以及在我的UPDATE路由中使用aggregate:
await skillSchema.aggregate([{ $project: { count: { $size: "$associatedUsers" } } } ])
但是我都不能上班。
有人对我如何实现此目标有任何建议吗?]
我有一个Mongoose文档:var SkillSchema = new mongoose.Schema({技能:{类型:字符串},计数:{类型:数字,默认值:0},associatedUsers:[{类型:mongoose.Schema.Types。 ..
回答如下:您可以在4.2中像这样使用$set
,它在更新中支持聚合管道。