MongoDb Bulkwrite, похоже, не выдает никакой ошибки - PullRequest
1 голос
/ 14 января 2020

Я пытался выполнить запрос Bulkwrite в понедельник goose, и я не знаю, по каким причинам он не выдает ошибку

let input = [
    {
        "variantId": "5e1760fbdfaf28038242d676",
        "quantity": 5

    },
    {
        "variantId": "5e17e67b73a34d53160c7252",
        "quantity": 13
    }
]

try{
let bulkArr = [];

for (const i of input) {
    bulkArr.push({
        updateOne: {
            "filter": { "_id": Mongoose.Types.ObjectId(i.variantId) },
            "update": { $inc: { "stocks": - i.quantity } }
        }
    })
}

await Variant.bulkWrite(bulkArr)
}
catch(e){
   console.log(e);
}

Я пытался обновить значения, которых нет в базе данных, а также я пытался обновить запасы до отрицательных значений, которые явно установлены на мин: 0, оба следующих запроса должны были выдать ошибку. Но не было выдано никакой ошибки.

1 Ответ

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

Обновление несуществующего документа не считается ошибкой записи. Вы можете console.log результат, чтобы увидеть, что он просто информирует вас о количестве подходящих элементов:

let result = await Test.bulkWrite(bulkArr);
console.log(result);

, который печатает:

...
nMatched: 0,
...

Запуск $inc с отрицательным значением все еще действителен - вы можете сделать это, и даже если у вас есть правило проверки, такое как min:0, оно не будет применено, так как $inc выполняется на сервере базы данных, а mon goose не знает, станет ли значение вашего поля отрицательным после этой операции или нет. Правило min будет применяться, когда вы хотите вставить новый документ или заменить существующий, используя метод .save().

Как тогда получить ошибку? Попробуйте нарушить уникальный ключ, вставив одно и то же значение в уникальный индекс - такая ситуация явно вызывает исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...