MongoDB:基于另一个集合更新一个集合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB:基于另一个集合更新一个集合相关的知识,希望对你有一定的参考价值。

您好,我有一个在线测验门户网站的项目。这些是我的模型:

用户模型

const userSchema = new Schema({
  firstName: { type: String, required: true, maxlength: 15 },
  lastName: { type: String, required: true, maxlength: 15 },
  rank: Number
});

评分模型

const scoreSchema = new Schema({
  userId: ObjectId,
  quizId: ObjectId,
  marks: Number,
  answers: [{ type: Object }],
});

[我想在将记录插入分数模型后每次更新用户模型。

毫不奇怪,这是我的排名公式。

平均=总分数/参与测验的总数

我如何使用MongoDB或Mongoose实现此目的?

非常感谢。

答案

您可以使用猫鼬schema method。让我们看看如何。

用户架构:

const userSchema = new Schema({
       firstName: { type: String, required: true, maxlength: 15 },
       lastName: { type: String, required: true, maxlength: 15 },
       rank: Number
});

const User = mongoose.model('User', userSchema);

分数模式:

const scoreSchema = new Schema({
   userId: ObjectId,
   quizId: ObjectId,
   marks: Number,
   answers: [{ type: Object }],
});

// Add post save method on this schema
 scoreSchema.post('save', function (doc) {
   console.log('this fired after a document was saved');
   // doc.userId  is you user for this score so
  // rank:calculated_rank you formula here
   User.updateOne({_id:doc.userId} , {rank:calculated_rank}) 
 });
 // model 
 const Score = mongoose.model('Score', scoreSchema);

因此,每当您调用分数模式上的保存时,就会触发post('save'),并且您可以在此函数中更新userSchema。

以上是关于MongoDB:基于另一个集合更新一个集合的主要内容,如果未能解决你的问题,请参考以下文章

如何更新meteor.js中的Mongodb集合?

MongoDB 集合中可以包含另一个集合吗?

使用spring boot将大量数据从一个集合复制到Mongodb中的另一个集合

在通过流星的发布方法提供数据之前从另一个 mongodb 集合中添加信息

在mongodb中将一个字段从一个集合复制到另一个集合,外键为混合类型

如何将代码片段存储在 mongodb 中?