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

时间:2015-03-02 17:18:31

标签: javascript mongodb 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参数不是字符串。

问题在于,当其中一个文档未通过验证时,只有第一个失败被发送到承诺中的失败函数。

此外,我无权访问已成功保存的任何记录。我在github上搜索了文档和测试,但在这个问题上找不到任何东西。

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

1 个答案:

答案 0 :(得分:0)

显然,当将数组传递给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);
    });
});

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