我在一个集合中有一个ObjectId数组,我想简单地添加另一个集合的ObjectId。
router.post('/add/child', (req, res) => {
console.log(req.body);
switch (req.body.type) {
case "category":
Category.findOne({_id: req.body.to})
.then(category => {
if (!category) {
res.json({error: req.body.type + " not found"});
}
category.update({$push: {words: req.body.child}});
console.log('category', category);
res.json({category});
})
.catch(err => {
console.log(err);
res.json(err.response)
})
default:
break;
}
}
请求正文是:
{ type: 'category',
to: '5c312fd6ec0fff1c280aca19',
child: '5c323bed9b0f713aa0d49399' }
类别是:
category { words: [],
_id: 5c312fd6ec0fff1c280aca19,
title: 'Weather',
[__v: 0 }
类别模型:
category: {
title: {
type: String,
required: true
},
variation: {
type: String
},
words: [{
type: Schema.Types.ObjectId,
ref: "words"
}]
},
答案 0 :(得分:1)
要追加数组,您需要在$push
或findOneAndUpdate
之类的更新方法中使用 findByIdAndUpdate
运算符。如果您使用的是现有方法,则需要先对数组本身调用push
方法,然后再调用save
,即:
Category.findById(req.body.to).then(category => {
if (!category) {
res.json({error: req.body.type + " not found"});
}
category.words.push(req.body.child);
return category.save();
}).then(updatedCategory => {
console.log('updatedCategory', updatedCategory);
res.json({ category: updatedCategory });
})
原子的一种更好的方法是使用findOneAndUpdate
方法,例如:
Category.findByIdAndUpdate(req.body.to,
{'$push': {'words': req.body.child}},
{new: true},
)
.exec()
.then(category => {
console.log('category', category);
if (!category) {
res.json({error: req.body.type + " not found"});
}
res.json({ category });
})
.catch(err => {
console.log(err);
res.json(err.response)
})
答案 1 :(得分:0)