使用mongoose保存多个文档时的错误处理

Handling errors when saving multiple documents with mongoose

本文关键字:错误 处理 文档 mongoose 保存 使用      更新时间:2023-09-26

我正在创建一个可以接收多个文档的API。我的代码使用promise调用Document#create,如下所示:

var body = [{url: "http://url1"}, {url: []}]; // example of a request payload
Image.create(body).then(function(images){
    // do something...
}).onReject(function(err) {
    // err is the object returned by the first problematic document
});

上面代码中的模型将拒绝第二个文档,因为url参数不是String。

问题是,当其中一个文档验证失败时,只有第一个失败被发送到promise中的失败函数。

此外,我无法访问任何成功保存的记录。我在github上搜索了文档和测试,但找不到任何关于此事的信息。

在创建多个文档时,是否有更好的方法来处理这种情况?

显然,当前无法获得在将数组传递给Document#create方法时成功的记录。即使是回调函数也不会将它们作为参数传递。

我设法做我想做的事情的方法是通过new创建资源对象,然后保存对象:

var body = [{url: "http://url1"}, {url: []}]; // example of a request payload
var images = [];
body.forEach(function(img) {
    var image = new Image(img);
    image.save(function(err) {
        images.push(err || image);
    });
});

由于我不允许同时创建大量的记录,所以这个解决方案起到了作用。在执行结束时,我得到了一个数组,其中包含所有记录以及失败记录返回的错误消息。