最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

将猫鼬文档中的字段设置为数组长度

运维笔记admin12浏览0评论

将猫鼬文档中的字段设置为数组长度

将猫鼬文档中的字段设置为数组长度

我有一个猫鼬的文档:

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,它在更新中支持聚合管道。

发布评论

评论列表(0)

  1. 暂无评论