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

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

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

这是我在ktor中的POJO类

  1. @Serializable
  2. data class User(
  3. @BsonId
  4. val _id: String? = ObjectId.get().toString(),
  5. val username: String,
  6. val password: String,
  7. val salt: String
  8. )

"这是我的知识库Impl"

  1. class MongoUserDataSource(
  2. db: CoroutineDatabase
  3. ): UserDataSource {
  4. private val users = db.getCollection<User>()
  5. override suspend fun getUserByUsername(username: String): User? {
  6. return users.findOne(User::username eq username)
  7. }
  8. override suspend fun insertUser(user: User): BsonValue? {
  9. return users.insertOne(user).insertedId
  10. }
  11. override suspend fun getUser(userId: String): User? {
  12. return users.findOneById(userId)
  13. }
  14. }
2exbekwf

2exbekwf1#

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

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

getUser,就像这样

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

希望这对你有帮助!

相关问题