【问题标题】:Mongoose find always returning true when it shouldn't猫鼬发现总是在不应该的时候返回真
【发布时间】:2014-05-28 08:06:38
【问题描述】:

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

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

这是退出我的控制台的内容:

[]
found

预期的行为应该是将not 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
  }
]

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    回调接口语义不是你想的那样。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 2022-11-22
      • 2015-11-06
      • 1970-01-01
      • 2017-09-19
      • 2015-08-28
      • 1970-01-01
      相关资源
      最近更新 更多