Ошибка при удалении многих документов с использованием $ в mon goose node.js - PullRequest
0 голосов
/ 15 января 2020

Я хочу удалить записи на основе входящих (со стороны клиента) array из _ids. Моя функция удаления выглядит следующим образом:

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"

Как мне ее устранить?

1 Ответ

1 голос
/ 15 января 2020

Таким образом, в общем случае mon goose findById*'s будет принимать один _id в качестве фильтра, если вы передадите внутренне строку, mon goose преобразует строку в _id, поэтому вы не можете передать ей массив - если вы хотите работать с findByIdAndRemove - вам нужно l oop на _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
                });
            }
        });
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...