猫鼬model.find()在调用model.save()后返回null(等待调用)

时间:2020-11-09 18:27:34

标签: node.js mongodb mongoose

请注意,有一个与此问题非常相似的问题: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

那么,如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

User.findById(newUser.id)返回了null,因为mongoose use _id not id =>等待getUser(newUser.id),

尝试此=> let user = await getUser(newUser._id)