如何在插入后从mongoDB文档返回InsertedId?尝试了InsertedId,但它返回空值

mmvthczy  于 2022-11-03  发布在  Go
关注(0)|答案(1)|浏览(173)

我正在使用ktor和MongoDB作为我的一个android项目的后端。当插入一个文档时,确认返回true,但是当我得到InsertedId时,它返回null,尽管已经插入到数据库中。我需要插入的id,这样我就可以在会话中存储它,并且还可以将插入的对象和id一起返回给android。我是MongoDB的新手,可能做错了什么。

这是我在ktor中的POJO类

@Serializable
data class User(
    @BsonId
    val _id: String? = ObjectId.get().toString(),
    val username: String,
    val password: String,
    val salt: String

)

"这是我的知识库Impl"

class MongoUserDataSource(
    db: CoroutineDatabase
): UserDataSource {

    private val users = db.getCollection<User>()

    override suspend fun getUserByUsername(username: String): User? {
        return users.findOne(User::username eq username)
    }

    override suspend fun insertUser(user: User): BsonValue? {
        return users.insertOne(user).insertedId
    }

    override suspend fun getUser(userId: String): User? {
       return users.findOneById(userId)

    }
}
2exbekwf

2exbekwf1#

当您执行findById时,我相信您希望使用ObjectId而不是字符串值进行搜索。

override suspend fun insertUser(user: User): ObjectId? {
    return users.insertOne(user).insertedId.asObjectId().value
}

getUser,就像这样

override suspend fun getUser(userId: ObjectId): User? {
    return users.findOneById(userId)
}

希望这对你有帮助!

相关问题