创建后如何在mongoose模式中填充数组?

时间:2016-02-22 22:30:52

标签: javascript node.js mongodb mongoose mean

我有以下两种模式:

var UserSchema = new Schema({
  provider: String,
  username: String,
  ...
  categories: [{type: Schema.Types.ObjectId, ref: 'Category'}],
  ...
});

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

var CategorySchema = new mongoose.Schema({
  name: String,
  description: String,
  adultOnly: { type: Boolean, default: false },
  ...
});

export default mongoose.model('Category', CategorySchema);

现在每当我创建一个新用户时,我都希望使用所有现有类别自动填充他的类别。根据他的年龄,他可能不会被分配到成年人的类别。

我该怎么做?我这样试过:

var newUser = new User(req.body);
  ...
  newUser.saveAsync()
    .spread(function(user) {


  Category.findAsync({}, '_id', function(err, categories) {
    if (!err){

      var size = categories.length;

      for (var i = 0; i < size; i++) {
        user.categories.push(categories[i]._id);
      }

    } else {throw err;}
  });

  ...

 })
 .catch(validationError(res));

但这似乎不起作用。

希望你能帮助我。

1 个答案:

答案 0 :(得分:0)

看看这是否有帮助:

var newUser = new User(req.body);
...
newUser.saveAsync()
.spread(function(user) {
  Category.find({}, {'_id': 1}, function(err, categories) {
    if (!err){
      /*var size = categories.length;
      for (var i = 0; i < size; i++) {
        user.categories.push(categories[i]._id);
      }*/
      user.categories = [];
      user.categories = categories;
    } else {throw err;}
  });
...
})
.catch(validationError(res));