MongoDb Bulkwrite似乎没有引发任何错误

时间:2020-01-14 04:51:55

标签: node.js mongodb mongoose

我一直试图在Mongoose中执行Bulkwrite查询,但我不知道是什么原因导致它不会引发错误

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);
}

我试图更新数据库中不存在的值, 以及我尝试将库存更新为负值(明确设置为min:0) 以下两个查询都应该引发错误。但是没有引发任何错误。

1 个答案:

答案 0 :(得分:1)

更新不存在的文档不被视为写入错误。您可以console.log的结果来看,它只是告诉您有关匹配元素的数量:

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

打印:

...
nMatched: 0,
...

以负值运行$inc仍然有效-您可以执行此操作,即使您有一个像min:0这样的验证规则,也不会应用,因为$inc在数据库上执行了服务器和猫鼬不知道此操作后您的字段值是否会变为负数。当您要使用min方法插入新文档或替换现有文档时,将应用.save()规则。

然后如何获取错误?通过在唯一索引中插入相同的值来尝试破坏唯一键-这种情况会明确引发异常。