mongoose.findOne() 返回 null
Posted
技术标签:
【中文标题】mongoose.findOne() 返回 null【英文标题】:mongoose.findOne() returns null 【发布时间】:2020-08-25 23:07:32 【问题描述】:我正在制作一个不和谐的机器人,我想检查用户的 id 是否在数据库中,如果是则返回消息。 我当前的代码正在创建新数据,即使用户已经在数据库中有他的 ID:
let user = message.mentions.members.first() || bot.users.cache.get(args[0])
let userid = user.user.id
Data.findOne(
userID: userid,
serverID: message.guild.id,
name: user.user.username,
language: args[2],
email: args[1],
lb: "all",
, (err, data) =>
if (err) return console.log(err);
if (!data)
const newData = new Data(
name: user.user.tag,
language: args[2],
email: args[1],
userID: userid,
serverID: message.guild.id,
lb: "all"
)
newData.save().catch(err => console.log(err));
return message.channel.send("new data created")
else
if (data.userID === user.user.id) return message.reply("Already has his data.")
)
这是我的猫鼬方案代码:
const mongoose = require("mongoose");
const dataSchema = mongoose.Schema(
name: String,
language: String,
email: String,
userID: String,
serverID: String,
lb: String,
usage: Number
)
module.exports = mongoose.model(`Data`, dataSchema)
【问题讨论】:
【参考方案1】:您不需要在 findOne()
中使用所有这些条件,您只需要使用 1 个唯一标识符,在本例中为 userID
。
这就是它无法按预期工作的原因,除非所有条件都与现有用户数据中的条件相同,否则它不会找到它。
Data.findOne(
userID: userid
, (err, data) =>
// do something
)
【讨论】:
工作。谢谢!你有什么解释它为什么起作用吗? 我在答案中添加了解释。我猜发生的事情是,您使用某些数据创建了文档,当您再次执行此操作时,您没有使用完全相同的数据执行此操作,因此并非满足findOne()
中的所有条件导致它说有'不是一个现有的文档,它必须创建一个。
是的,有道理。再次感谢!以上是关于mongoose.findOne() 返回 null的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose findOne() 和 find() 返回无效值,它们应该分别返回 null / 空列表
Mongoose findOne as : Array = [FindOne , FindOne, FindOne ,FindOne, FindOne...] ,使用 ExpressJs