【问题标题】:Model.create retrive how many documents have been createdModel.create 检索已创建的文档数量
【发布时间】:2014-10-11 04:35:01
【问题描述】:

我在 Mongoose 中使用 Model.create(Array)。
我想向用户提供有关已创建多少文档以及未创建多少文档的反馈(即它们未验证)。
我创建了一个这样的回调

User.create(usersToImport, function(err, docs) {  
    console.log(err);
    console.log(docs);
}

问题在于,如果任何文档未验证,我只会收到单个无效文档的验证错误,而我无法检索有关插入文档的任何信息。
有什么方法可以获取这些信息?

【问题讨论】:

    标签: node.js mongodb validation mongoose bulkinsert


    【解决方案1】:

    我认为,您需要来自when.js module 的类似.settle() method 的内容。

    这是一个使用when.js 和mongoose 3.8.x 的示例:

    when = require('when');
    
    promises = usersToImport.map(function(user) {
      return User.create(user); // returns Promise
    });
    when.settle(promises).then(function(results) {
      // results is an array, containing following elements:
      //   { state: 'fulfilled', value: <document> }
      //   { state: 'rejected', value: <error> }
    });
    

    没有 Promise 也可以实现(例如使用async module),但代码会复杂得多。

    【讨论】:

    • 有趣。我知道async,但我不知道when.js。我试试看能不能解决问题。
    【解决方案2】:

    Model.create() 不会为您返回该信息。最好的选择是滚动您自己的Model.create() 版本,这本质上是一种方便的方法,可以多次调用Model.save(),然后自己整理信息。一个很好的入门方法是Model.create() 的代码。

    【讨论】:

    • 是的,我知道Model.create 只是Model.save 的包装。我会检查代码,看看它是否有用。
    猜你喜欢
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多