Mongoose更新父文档添加现有的子文档ID

时间:2017-06-01 06:23:19

标签: node.js mongodb express mongoose

我有两个猫鼬模特。类别和子类别。

使用meanjs.org。

中的登录名自动加载这些模型

category.model.js如下

...

const Schema = mongoose.Schema;

const CategorySchema = new Schema({
  name: {
    type: String,
    index: {
      unique: true,
      sparse: true
    },
    validate: [validateProperty, 'Please enter Category Name !']
  },
  description: {
    type: String,
    trim: true
  },
  subCatagories: [
    {
      type: Schema.Types.ObjectId,
      ref: 'SubCategory'
    }
  ],
  updated: {
    type: Date
  },
  created: {
    type: Date,
    default: Date.now
  },
  status: {
    type: String,
    enum: [
      'active', 'inactive', 'removed'
    ],
    default: 'active'
  }
});

...

mongoose.model('Category', CategorySchema);

subcategory.model.js如下

...

const Schema = mongoose.Schema;

const SubCategorySchema = new Schema({
  name: {
    type: String,
    index: {
      unique: true,
      sparse: true // For this to work on a previously indexed field, the index must be dropped & the application restarted.
    },
    validate: [validateProperty, 'Please enter SubCategory Name !']
  },
  description: {
    type: String,
    trim: true
  },
  updated: {
    type: Date
  },
  created: {
    type: Date,
    default: Date.now
  },
  status: {
    type: String,
    enum: [
      'active', 'inactive', 'removed'
    ],
    default: 'active'
  }
});

...

mongoose.model('SubCategory', SubCategorySchema);

通常子类别和类别将单独添加,稍后我需要将子类别分配给类别。

我的类别更新方法如下所述

...
categoryRouter.route('/:catId').put((req,res)=>{
 let category = req.category;
   category = _.extend(category, _.pick(req.body, whitelistedFieldsForUpdate));
   category.updated = Date.now();

   category.save(function(err) {
     if (err) {
       return res.status(422).json({message: err});
     }
     res.json(category);
   });
 });
...

类别创建路线如下

categoryRouter.route('/').post((req, res) => {
  req.body = _.pick(req.body, whitelistedFieldsForCreate);
  let category = new Category(req.body);
  category.save().then((data) => {
    if (!data) {
      res.status(422).json({message: "An error occured saving Category!"});
    }
    res.status(200).json(data);
  }).catch((err) => {
    res.status(422).json(err);
  })
}));

首先,我发布到子类别端点并创建了一些子类别。然后我POST到类别,没有子类别,也创建了类别对象。现在我需要用它的子类别ID PUT(更新)类别对象来放入它的子类别数组。

当我发送一个带有子类别的放置请求时,对象ID就像数据库中存在的子类别的592e9878ee00dd962deb6e2e一样,它不会更新。

0 个答案:

没有答案