使用猫鼬保存多个文档时处理错误

Handling errors when saving multiple documents with mongoose

我正在创建一个可以接收多个文档的 API。 我的代码使用 promises 调用 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 参数不是字符串。

问题是当其中一个文档未通过验证时,只有第一个失败会发送到 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);
    });
});

由于我不允许一次创建大量记录,因此此解决方案有效。在执行结束时,我有一个包含所有记录以及失败记录返回的错误消息的数组。