【问题标题】:How can i return the InsertedId from mongoDB document after insertion. Tried InsertedId but it returns null插入后如何从 mongoDB 文档返回 InsertedId。试过 InsertedId 但它返回 null
【发布时间】:2022-10-23 20:24:18
【问题描述】:

我正在使用 ktor 和 MongoDB 作为我的 android 项目的后端。插入文档时,确认返回 true,但是当我得到 InsertedId 时,尽管已插入数据库,但它返回 null。我需要插入的 id,以便我可以将其存储在 session 中,并将插入的带有 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)

    }
}

【问题讨论】:

    标签: mongodb kotlin


    【解决方案1】:

    当您执行findById 时,我相信您想使用ObjectId 而不是字符串值进行搜索。我会这样更新你的insertUser 函数

    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)
    }
    

    希望这可以帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 2021-10-03
      • 2021-11-07
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多