如何使用mongoose从MongoDB中检索单个文档到javascript?

时间:2016-02-16 17:24:07

标签: node.js express mongoose

我正在尝试从mongodb集合中获取单个文档,并将该文档用作javascript中的对象。问题是我需要将它作为普通对象存储在javascript中的json仅在我从response.json(doc)调用它时才会出现,并且我无法在函数外部访问该文档。我发现的所有信息都令人困惑!

是否有可能有这样的事情:

var a = mongoose.model('collectionName').findOne() //etc.

只需获取整个文档并将其转换为可在全局范围内访问的javascript对象,因此我可以随时从a获取属性。

2 个答案:

答案 0 :(得分:1)

听起来你有一个node.js回调问题。 这不仅适用于mongoose,但您为node.js编写的任何代码都将如下所示:

rac_textSignal()

所以你只需嵌套回调,直到你拥有发送响应所需的一切。

你需要习惯这种编程风格。 一旦你对此感到满意,你会发现有时嵌套变得太深(callback hell)。

有解决方案 - 将您的回调拆分为单独的函数或使用asyncpromiseses6 generators

但首先,你需要“自然地”理解它的完成方式。

答案 1 :(得分:0)

NodeJS的主要概念(因此使用MongoDB)是您正在编写的代码的异步性质。您对数据库的任何查询都将与代码的其余执行异步发生。因此,您需要使用查询传递回调函数,以便在查询完成时,将执行回调函数。您要分配给查询结果的任何变量都应该在该回调中完成。

例如:

mongoose.model('collectionName').findOne( { ' some query here' }, function(err, doc) {
    // set some variable to the 'doc' result if you want
    // put any logic here to handle the result
});

您在回调方法中放入的任何代码都将在查询完成时执行。因此,在对结果文档执行任何操作之前,应始终检查是否存在错误。