我正在删除从一个param
(在本例中称为slug)的数组中找到的文档:
const selected = ['abc_1', 'aaa_2', ...]
MyModel.remove({'slug': { $in: selected }}, (err, data) => {
if (err || data === null){
next(err)
}
res.json(data)
});
问题:
想要像在findOneAndRemove()
回调中使用doc
参数一样保留删除的Objects
,即:
如果
new: false
则应用更新之前的文档或者如果new = true
则应用更新之后的文档。
自定义解决方案(使用承诺)
这个解决方案有效,但我发现脏而且有点冗长(因为,我认为,执行两次类似的查询):
const selected = ['abc_1', 'aaa_2', ...]
MyModel.find({'slug': { $in: selected }})
.then(orig => {
MyModel.remove({'slug': { $in: selected }}, (err, data) => {
if (err || data === null){
next(err);
}
console.log('Array of Objects deleted recently:', orig);
res.json(data)
});
})
问题
由于remove()
回调似乎返回了一个包含result.n
(数量)等信息的result
对象,而不是原始文档Object
s,有更好/正确的方法来处理这种情况吗
一个可能的改进是使用id删除文档。它应该更快。
const selected = ['abc_1', 'aaa_2', ...]
MyModel.find({'slug': { $in: selected }})
.then(orig => {
const ids = orig.map(o => o._id);
MyModel.remove({'_id': { $in: ids }}, (err, data) => {
if (err || data === null){
next(err);
}
console.log('Array of Objects deleted recently:', orig);
res.json(data)
});
})