当它不应该时,mongoose发现总是返回真实

我正在使用Mongoose.js来连接我的Mongo数据库。 这个函数search我的Location名称,应该是not found的控制台而不是found ,因为我没有名称!@£

 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 } ] 

callback接口语义不是你所想的。

  • err表示查询失败,完全由于像数据库无法访问的错误。 关于文件是否匹配没有意义
  • obj是一个结果数组,你应该命名“位置”恕我直言,保持清楚。 如果没有文档匹配查询,则此数组将为空。 如果一些匹配,他们将在arrays中。

所以总共有三个国家需要考虑:错误,不匹配成功,有些匹配成功。