node.js - Mongoose 发现总是在不应该返回 true 的时候返回 true

标签 node.js mongodb mongoose

我正在使用 Mongoose.js 与我的 Mongo 数据库交互。此函数搜索我的 Location 名称,并且应该将 not find 记录到控制台,而不是 found,因为我没有名称为 !@£Location

Location.find({name: "!@£"}, function(err, obj) {
  console.log(obj);
  if (!err) {
    console.log("found");
  } else {
    console.log("not found");
  }
});

这是注销到我的控制台的内容:

[]
found

预期的行为应该是将未找到记录到控制台。以下是 Location 模型数据的转储:

[
  {
     "_id":"5384c421af3de75252522aa2",
     "name":"London, UK",
     "lat":51.508515,
     "lng":-0.12548719999995228,
     "__v":0,
     "modified":"2014-05-27T16:58:09.546Z",
     "search_count":1
  },
  {
     "_id":"5384c766af3de75252522ab4",
     "name":"Paris, France",
     "lat":48.856614,
     "lng":2.3522219000000177,
     "__v":0,
     "modified":"2014-05-27T17:12:06.990Z",
     "search_count":1
  },
  {
     "_id":"53851a213a33fe392b758046",
     "name":"Zagreb, Croatia",
     "lat":45.8150108,
     "lng":15.981919000000062,
     "__v":0,
     "modified":"2014-05-27T23:05:05.306Z",
     "search_count":1
  }
]

最佳答案

回调接口(interface)语义不是你想象的那样。

  • err 表示查询由于数据库无法访问等错误而完全失败。对于文档是否匹配没有任何意义
  • obj 是一个结果数组,恕我直言,您应该将其命名为“位置”以保持清晰。如果没有文档与查询匹配,则该数组将为空。如果某些匹配,它们将在数组中。

因此总共需要考虑 3 种状态:错误、没有匹配的成功、有一些匹配的成功。

关于node.js - Mongoose 发现总是在不应该返回 true 的时候返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23900653/

相关文章:

javascript - 读取环境变量时 JSON.parse/stringify 有什么用?

php - 嵌套文档作为对象而不是数组插入

node.js - 如何使用 Node JS 将 mongoDB 查询记录到终端

Node.js Rest api 验证来自 url 的传入 json

Node.js 将图像通过管道传输到内存中并显示它

javascript - 为什么这个尾递归循环会导致javascript/node中的栈溢出?

node.js - 如何使用 Mongoose 获取文档然后将输入保存到引用文档

mongodb - 是否有 RDBMS 进行自动缩放、分片、重新平衡?

node.js - Mongoose/Node 如何直接在EJS文件中访问数据库

node.js - CastError:在模型“页面”的路径“_id”处,对于值“5be86bf8170c2c22f8bb93a6”的强制转换为ObjectId失败