javascript - Mongoose 中的 Find() 调用

标签 javascript node.js mongoose

这些调用有什么区别,为什么在第一种情况下我的控制台记录“未定义”,而在第二种情况下我得到了正确的答案(一个整数)。

调用 count() 时 - 未定义。

function count() {
  let answer;
  Url.findOne({}).sort({short_url:-1}).exec(function (err,ur) { if (err) return err; answer = ur.short_url });
  console.log(answer);
}

调用 count() 时 - 一个整数。

function count() {

  Url.findOne({}).sort({short_url:-1}).exec(function (err,ur) { if (err) return err; console.log(ur.short_url) });

}

一般来说,我希望实现这样的调用(count())将返回“short_url”的最高值。

最佳答案

findOne 调用是异步的。因此,在 findOnde 语句返回之前调用 console.log 语句。

第二个是您正在使用回调。这意味着当 findOne 函数完成时调用此函数。这次它会起作用的。

但作为最佳实践,如果您使用 ES6 javascript,我建议您使用 asyncawait

async function count() {
   let answer;
   await Url.findOne({}).sort({short_url:-1}).exec(function (err,ur) { if (err) return err; answer = ur.short_url });
   console.log(answer);
}

关于javascript - Mongoose 中的 Find() 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53004240/

相关文章:

node.js - Mongoose : query on a field on an array of ref documents,

node.js - 在 MongoDB 模式中自动增加前导 0 的字段

javascript - 未捕获( promise )TypeError : undefined is not a function (Vue. js,Electron)

javascript - Emacs:是否可以在 js2 模式下自动插入分号?

javascript - 指令 'scope' 中需要值属性

javascript - Jquery for循环设置所选选项属性的输入值仅更改最后一个值

node.js - 如何在使用 Node js 上传后从后端更改视频 fps/比特率意味着它应该在视频中从 144p 实时更改为 240p

javascript - NodeJS 事件处理机制的用例

mongodb - Mongoose/MongoDB 在保存时抛出重复键错误?

javascript - 检查 JSON 是否包含来自另一个 JSON 的值对