将 Mongoose DB 中的值添加到 Node.js 中的变量中

Posted

技术标签:

【中文标题】将 Mongoose DB 中的值添加到 Node.js 中的变量中【英文标题】:Adding a value from Mongoose DB into a variable in Node.js 【发布时间】:2020-10-19 23:13:46 【问题描述】:

我对 Node.js 还是很陌生,似乎找不到任何可以帮助我解决这个问题的方法。 我在从最后一条记录中获取查询并将其添加到我的变量时遇到问题。

如果我像下面这样:-

let lastRecord = Application.find().sort($natural:-1).limit(1).then((result) =>  result );

然后我得到console.log中显示的变量值:-

Promise  <pending> 

我需要做什么才能将其正确输出到我的完整数据中?

【问题讨论】:

【参考方案1】:

这里是固定的:

Application.findOne().sort($natural:-1).exec().then((lastRecord) => 
  console.log(lastRecord); // "lastRecord" is the result. You must use it here.
, (err) => 
  console.log(err); // This only runs if there was an error. "err" contains the data about the error.
);

几件事:

    您只获得一条记录,而不是很多记录,因此您只需使用findOne 而不是find。因此,您也不再需要 limit(1)。 您需要调用.exec() 才能实际运行查询。 结果在回调函数内部返回给你,这里必须使用。

exec() 返回一个 Promise。 javascript 中的 Promise 基本上只是一个容器,其中包含将在未来某个时间完成的任务。它有then 方法,它允许你绑定函数以便它在完成时调用。

每当您使用 JavaScript 到另一台服务器获取一些数据时,代码都不会停止并等待数据。它实际上继续向前执行而无需等待。这称为“异步”。然后在数据回来的时候就回来运行then给的函数。

异步是一个简单的词,用于描述一个函数,当您调用它时将开始执行,但代码将继续向前运行而不等待它完成。这就是为什么我们需要为它提供某种功能,以便稍后在数据返回时执行。这称为“回调函数”。

这里有很多要解释的,但是请去研究一下 JavaScript Promises 和异步性,这会更有意义。

编辑:

如果这是在函数内部,您可以这样做:

async function someFunc() 
  let lastRecord = await Application.findOne().sort($natural:-1).exec();

注意函数前的async。这必须我在那里才能让await 工作。但是,如果您还不了解 Promise,则此方法有点难以理解。我建议您从我的第一个建议开始,并在您完全理解 Promise 后逐步使用 async/await 语法。

【讨论】:

好的,谢谢,但请原谅我对此的无知,因为我对此有点动摇,但是您将如何从该回调函数之外检索结果?但你说得对,我需要对此进行进一步研究 @JamLizzy101 你没有。这就是 JavaScript 应该如何工作的。您必须将使用该变量的任何逻辑移动到回调函数中。 让我试试【参考方案2】:

您需要await 记录而不是使用.then()。例如:

let lastRecord = await Application.find().sort($natural:-1).limit(1);

您可以在 MDN entry for await 中了解有关等待承诺的更多信息,但基本情况是,要使用来自承诺的响应,您可以使用 await 或将您的逻辑放入 .then 语句中。

【讨论】:

您不知道他是否在函数中,因此他可能需要将其包装在某个东西中以将async 放在上面。从表面上看,我认为他们甚至不了解 Promise 是什么。

以上是关于将 Mongoose DB 中的值添加到 Node.js 中的变量中的主要内容,如果未能解决你的问题,请参考以下文章

将新字段添加到集合的所有文档中,将文档字段中的值添加到 MongoDB (Mongoose) 中,记录为 300K+

在 Node/Mongoose/Express 中保持 DB 数据属性私有

在node中的使用mongoose

如何使用 node 和 reactjs 向 mongoose 数组添加注释?

Node.JS + Mongoose 回调地狱

node18---Mongoose