nedb:如何从 find() 函数中获取文档?

Posted

技术标签:

【中文标题】nedb:如何从 find() 函数中获取文档?【英文标题】:nedb: how to get docs out of find() function? 【发布时间】:2016-12-12 12:48:42 【问题描述】:

我将nedb模块封装在自定义对象中:

var Record = function() 
  var Datastore = require('nedb');
  this.db = new Datastore(filename: 'record');
  this.db.loadDatabase();
;

我想定义自己的函数来获取数据库中的所有对象:

Record.prototype.getItems = function() 
  var items = null;
  this.db.find(, function(err, docs) 
    items = docs;
  );
  return items;
;

但是,变量“items”不能分配给变量“docs”,并且始终为“null”。我意识到这是由 javascript 的异步特性引起的。但是我怎样才能得到变量“docs”呢?

【问题讨论】:

【参考方案1】:

您需要一个回调函数来在数据准备好时检索数据,如下所示:

Record.prototype.getItems = function(callback) 
    this.db.find(, callback);
;

然后使用它:

const record = new Record();
record.getItems((err, docs) => 
    if (err) return handleError(err);
    console.log(docs);
);

【讨论】:

【参考方案2】:

您可以使用 Promise 和 async/await 语法来省略回调

Record.prototype.getItems = () => 
    return new Promise((resolve, reject) => 
        this.db.find(, (err, doc) => 
            err ? reject(err) : resolve(doc);
        );
    );

然后像这样检索数据

async function whatever()
    const data = await Record.getItems();

我还建议使用这个用于 nedb 的包装器模块,称为 NeDB-promises,它包括对承诺和事件的内置支持等便利功能

【讨论】:

以上是关于nedb:如何从 find() 函数中获取文档?的主要内容,如果未能解决你的问题,请参考以下文章

如何对 NeDB 数据库进行排序以获取响应? (Javascript 回调/箭头函数语法混乱)

如何在 vue.js 中通过 NeDB 的“返回”获取结果

如何使用 NeDB 仅按名称查找文档?

无法从 Mongoose 模型中获取文档“find”承诺

如何使用 NodeJS 仅将 NeDB 数据库中的某些字段存储到数组中

mongodb高级查询