我想根据_ids
的传入(来自客户端(array
删除记录。我的删除功能是这样的
export function removeReferral(ids) {
return new Promise((resolve, reject) => {
ReferralLink.findByIdAndRemove({ _id: { $in: (ids).map(mongoose.Types.ObjectId) } }, (err, link) => {
console.log('delete referrals response : ', link)
if (!err) {
resolve({
success: true,
message: "Referral removed successfully",
data: null
});
} else {
resolve({
success: false,
message: "Unable to remove referral",
data: err
});
}
});
});
}
但是我收到这样的错误
message: "Cast to ObjectId failed for value "{ _id: { '$in': [ 5e1f2e54d4252144ec17501a ] } }" at
path "_id" for model "referralLinks""
name: "CastError"
stringValue: ""{ _id: { '$in': [ 5e1f2e54d4252144ec17501a ] } }""
kind: "ObjectId"
我该如何解决?
所以一般来说猫鼬findById*'s
会接受单个_id
作为过滤器,如果你在内部传递一个字符串,猫鼬会将字符串转换为_id
,所以你不能将数组传递给它 - 如果要使用findByIdAndRemove
- 你需要循环_id
并进行多次数据库调用(删除每个文档(, 我也稍微改变了你的代码,为什么要检查!err
?相反,您可以先检查if(err)
然后检查以写入结果。试试这个:
试试这个:
export function removeReferral(ids) {
return new Promise((resolve, reject) => {
ReferralLink.deleteMany({ _id: { $in: (ids).map(mongoose.Types.ObjectId) } }, (err, link) => {
console.log('delete referrals response : ', link)
if (err) {
resolve({
success: false,
message: "Unable to remove referral",
data: err
});
} else if (link.n > 0) { /** Checking if atleast one _id in input array is removed,
Or if you need to check all are deleted then n == array.length */
resolve({
success: true,
message: "Referral removed successfully",
data: null
});
} else {
resolve({
success: true,
message: "Not able to remove Referrals successfully",
data: null
});
}
});
});
}