如何使用mongoose基于用户ID保存文档?

时间:2017-02-08 17:56:21

标签: javascript node.js mongodb mongoose

我正在尝试根据用户ID保存模板,如何确保模板保存时使用用户ID _id保存?我添加了对templateSchema的{​​{1}}的引用。

user.model.js

User

template.model.js

var UserSchema = new mongoose.Schema({
  _id: { type: String, required: true, index: {unique: true}},
  firstName: String,
  lastName: String,
  type: String,
  groups:[{type: String, ref: 'Group', required: false}]
},
  {
    toObject: {
      virtuals: true
    },
    toJSON: {
      virtuals: true
    }
  });

export default mongoose.model('User', UserSchema);

template.controller.js

var User = require('../user/user.model.js');

var TemplateSchema = new mongoose.Schema({
  _id: { type: String, required: true},
  name: String,
  id: String,
  appliesTo: [],
  properties: [],
  createdBy: { type: mongoose.Schema.Types.ObjectId, ref: 'User'}
 });


export default mongoose.model('Templates', TemplateSchema);

1 个答案:

答案 0 :(得分:0)

Mongoose有两个内置函数,在保存文档之前(之前)和之后(之后)调用。我的建议是利用它们。以下是我的代码示例,其中我在保存用户文档之前搜索序列号。您可以这样做:保存模板时,请向数据库请求用户ID(反之亦然)。你甚至可以保存一个,获取id并保存另一个。

Bellow遵循序列和用户的代码。

var UserSchema   = new Schema({
username: { type: String, required: true, unique: true },
id: { type: String },
...
});

UserSchema.pre('save', function(next) {
  let doc = this;     
  let id = 'userSeq'    

  Sequence.findByIdAndUpdate(id, { $inc : {nextSId : 1} },  function(error,data) {         
    if(error)
      next(error)               
    doc.id = data.nextSId-1;
    next();
  })        
});

我希望我的回答对你有用。只是一个评论,如果文档更新,则不会调用前置和后置。