【问题标题】:Why is Mongoose returning "null" continuing to return null regardless of what I do?为什么无论我做什么,Mongoose 返回“null”都会继续返回 null?
【发布时间】:2020-10-28 22:08:59
【问题描述】:

我能够连接到我的 MongoDB 数据库,并且确信我正在连接到正确的数据库。当我尝试从数据库中获取文档时,我总是得到“null”。我确信集合中有文档,因为我可以在 Compass 中看到它们。

const theschema = new Schema({
    sensor: {
        type: String,
        required: true
    }
})

const model = mongoose.model('Sensor', theschema)


model.findOne({}, function(err, data) {
    console.log(data)
})

以上是我目前使用的代码。我将不胜感激任何可能的帮助。谢谢! :)

【问题讨论】:

  • 您是否检查过err 是否已定义?当你从 mongodb 读取时,可能有一些错误。
  • 您的收藏名称是什么,您如何连接到它?

标签: javascript node.js mongoose mongoose-schema


【解决方案1】:

我认为您需要在大括号内指定一个条件。例如:Adventure.findOne({ country: 'Croatia' }, function (err, adventure) {});

正如您在docs 中看到的那样注意:条件是可选的,如果条件为空或未定义,mongoose 将向 MongoDB 发送一个空的 findOne 命令,该命令将返回一个任意文档。如果您按 id 查询,请改用 findById()。

【讨论】:

  • 啊,你说得对,因为 OP 使用的是findOne()。在这种情况下,由于他们正在寻找一个特定的文档,因此条件是必要的。但如果 OP 使用find(),那么{} 将是一个完全有效的条件,返回所有文档。
  • 感谢您的回复。有没有办法从数据库中获取随机文档?
  • @JeremyTille 我明白你的意思。我也尝试使用 find() 并得到 [] 作为响应。你知道这是为什么吗?
  • 不,确实应该返回所有文件
【解决方案2】:

如果您没有任何要搜索的查询(根据您的问题),您可以使用 find 方法,并根据每个文档大小和用例将其限制为某个值(您可以将其限制为 1,因为您是测试连接似乎)

const sensor = mongoose.model('Sensor', theschema)

let query = sensor.find({}).limit(1);
query.exec(function(err, data) {
    console.log(data)
})

【讨论】:

  • 感谢您的回复。我已经尝试过了,现在我在控制台中登录了 []。你知道这是什么原因吗?
【解决方案3】:

刚刚发现问题。问题是 mongoose 将集合名称复数化,因此它在错误的集合中查找。

我使用的解决方案是在定义模型之前添加这行代码 theschema.set('collection', 'Sensor')。这种力量设置了集合,因此 Mongoose 不会将其复数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-29
    • 2013-08-09
    • 2013-06-05
    • 2014-05-23
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多