【问题标题】:findOne not returning correct result( Mongo DB and nodejs)findOne 没有返回正确的结果(Mongo DB 和 nodejs)
【发布时间】:2016-05-28 02:24:17
【问题描述】:

我在集合中存储了一个文档,当我尝试通过 findOne 检索它时,它返回错误的结果: 我的 Mongoose 模型是这样的:

var db = require('../db');
var mongoose = db.mongoose_var;
var companySchema = mongoose.Schema({
companyName:String
});

module.exports = mongoose.model('Company',companySchema);

然后我在 server.js 中用作:

var CompanySchema = require('./schemas/companySchema');

当我试图查找已插入的记录时,如下所示:

CompanySchema.findOne({'Company.companyName':jsonObj.companyName},function(err,companyName){
 console.log('companyName foudn:'+companyName);
 if(companyName !== null){
    res.status(404).json({status:'Name already in the DB'});
    return;
    }else{...

它无法找到该记录,但它返回的可能是第一条记录。 thedb中存在以下记录:

当我尝试添加另一家公司并使用此 findOne 检查此名称是否已存在时,findOne 仅返回此记录。我的日志sn-ps

而 mongo shell 只返回正确的结果。

在 mongo shell 中,我在字段和值周围使用“”,而不是在 findOne Api 中。 提前致谢

【问题讨论】:

  • 也许不相关,但以防万一有人像我一样最终来到这里……遇到了类似的问题,findOne 在不应该返回“记录”时返回了“记录”。然而,我最终意识到它正在返回 Promise。 Doh 我总是犯这个错误,记得await

标签: node.js mongodb mongoose mongoose-schema


【解决方案1】:

您可能应该使用以下内容:

CompanySchema.findOne({'companyName':jsonObj.companyName},function(err,companyDocument){
if(err) console.log(err);
console.log('company found:' + companyDocument);
if(companyDocument){
res.status(404).json({status:'Name already in the DB'});
return;
}else{...

您的代码中的错误是您使用的是 Company.companyName 而不是 companyName。 companyName 是 Company 集合中字段的名称。

希望对你有所帮助。

【讨论】:

  • 我可以在晚上进行测试,然后更新线程但是我记得尝试了所有可能的组合,结果都是一样的。我会再次检查。但即使我以错误的方式将字段放入 findOne(,value) 中,它也不应该返回任何成功的结果。 在这种情况下,我期待空对象
  • 没错,查询将返回null。您没有以错误的方式放置该字段。您查询的字段 (Company.companyName) 不存在。 companyName 是公司集合中的字段。所以 findOne 应该在您的查询中返回 null。
  • 但是当前查询没有返回null。检查主问题中终端窗口的第二个屏幕截图。我正在通过 findOne 寻找“someCompanyName2”,它正在返回“someComapanyName1”
  • 您能否输入整个代码,以便我了解您在做什么?我需要看看您在 CompanySchema 上的 findOne 调用。
猜你喜欢
  • 2017-10-05
  • 1970-01-01
  • 2023-03-14
  • 2014-09-13
  • 2012-08-01
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多