如何使用 Bluebird 为游标和/或集合的 toArray() Promisify Node 的 mongodb 模块?

Posted

技术标签:

【中文标题】如何使用 Bluebird 为游标和/或集合的 toArray() Promisify Node 的 mongodb 模块?【英文标题】:How can I Promisify Node's mongodb module for cursors and/or a collections' toArray() using Bluebird? 【发布时间】:2014-10-07 11:40:30 【问题描述】:

相关包:

"dependencies": 
  "mongodb":    "1.4.x",
  "bluebird":   "2.3.x"

我看过:

How can I promisify the MongoDB native javascript driver using bluebird? Bluebird Promisfy.each, with for-loops and if-statements? https://***.com/a/21733446/438992 Bluebird 的承诺文档 其他几个地方

findAsync() 之后我被卡住了。

更喜欢一个游标,但很少有太多东西可以调用toArray()

也有可能我做错了。

MongoClient.connectAsync('mongodb://127.0.0.1:27017/sr')
  .then(function(_db) 
    db = _db;
    return db.collectionAsync('posts');
  )
  .then(function(colPosts) 
    return colPosts.findAsync();
  )
  .then ( A MIRACLE OCCURS )
  .catch(function(e) 
    console.log(e);
  )
  .finally(function() 
    if (db) db.close();
  );

奇迹发生的地方我想遍历游标结果或数组化集合。我在弄清楚如何解决这个问题时遇到了问题。

【问题讨论】:

遍历它们,然后做什么?结果应该去哪里? @Bergi 现在主要是为了副作用。 签出***.com/questions/24870812/… 【参考方案1】:

据我了解,.findAsync 返回一个游标的承诺。如果您想将数据拉入内存(如.toArray),我认为您正在寻找的内容类似于:

MongoClient.connectAsync('mongodb://127.0.0.1:27017/sr')
  .then(function(_db) 
    db = _db;

    return db
      .collection('posts')
      .find()
      .limit(limit)
      .sort(sort)
      .toArrayAsync();
  )
  .then(function(posts) 
    console.log('posts', posts);
  )
  .catch(function(e) 
    console.log(e);
  );

【讨论】:

以上是关于如何使用 Bluebird 为游标和/或集合的 toArray() Promisify Node 的 mongodb 模块?的主要内容,如果未能解决你的问题,请参考以下文章

SqlServerSqlServer编程语言T-SQL的游标使用

当 mongodb 集合为空时,响应式可尾游标关闭

如何使用 Bluebird 在构造函数构建的“类”上承诺导出的函数

sqlserver 游标都有哪些属性

如何在 javascript (meteor.js) 中操作返回的 mongo 集合/游标?

反射入门-浅谈反射用途_根据Ado游标对象创建list集合