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

我有两个mongoose模型。 类别和子类别。

这些模型使用meanjs.org中的login进行自动加载。

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); }); }); ... 

类别创build路线如下

 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到我的子类别的结束点,并创build了一些子类别。 然后我张贴到类别和没有子类别和创build类别对象也。 现在我需要PUT(更新)类别对象与它的子类别ID放在它的子类别数组。

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