请注意,有一个与此问题非常相似的问题:Model.find() returns null after model.save() in Mongoose + Nodejs,但在此问题中,提出该问题的人没有等待Promise便犯了一个错误。但是我确实等了。所以我的问题将有所不同。
我有此代码
const mongoose = require("mongoose")
const {connection, Schema} = mongoose
mongoose.connect("mongodb://localhost:27017/test").catch(console.error)
const UserSchema = new Schema({
firstName: String,
lastName: String,
likes: [String]
})
const User = mongoose.model("User", UserSchema)
const addUser = (firstName, lastName) => new User({
firstName,
lastName
}).save()
const getUser = (id) => User.findById(id)
const removeUser = (id) => User.remove({id})
connection.once("connected", async () => {
try {
const newUser = await addUser("John", "Smith")
const user = await getUser(newUser.id)
user.firstName = "Johny"
user.lastName = "Smithy"
user.likes = [
"cooking",
"watching movies",
"ice cream"
]
await user.save()
console.log(JSON.stringify(user, null, 4))
} catch (error) {
console.dir(error.message, {colors: true})
} finally {
await connection.close()
}
})
在这里,一旦连接完成,我就通过调用addUser()
创建一个新用户,该用户构造了User
模式,并将其分配给newUser
常量。在下一行中,我叫getUser
,后者叫User.findById(newUser.id)
。但这返回null
。我已经检查了数据库,并且有一个新条目。但是我不知道为什么User.findById
返回null。如您所见,我在上一行中使用了await
关键字来验证诺言是否得到解决。
由于null
的值,我收到这样的错误,
Cannot set property 'firstName' of null
那么,如何解决这个问题?
答案 0 :(得分:0)
User.findById(newUser.id)
返回了null
,因为mongoose use _id not id
=>等待getUser(newUser.id),
尝试此=> let user = await getUser(newUser._id)