当前位置: 首页 > 知识库问答 >
问题:

使用指定_id添加具有反应式Mongo的文档

包建义
2023-03-14

我正在尝试插入一个新文档,其中_id字段在ReactiveMongo中指定。但是我所有的插入都是使用Mongo默认的增量对象ID执行的。有没有办法在插入过程中指定_id?

这是我的代码。

case class MongoId($oid: String)

object MongoId {
  implicit val mongoIdFormat = Json.format[MongoId]
}

case class Person(_id: MongoId, name: String) 

object Person {
  implicit val PersonFormat = Json.format[Person]
}

val collection = reactiveMongoApi.database.map(_.collection[JSONCollection]("people"))

def save(person: Person) = {
  collection.flatMap(d => d.insert(person)).map(wr => wr.hasErrors match {
    case true => None
    case false => Some(person)
  })
}

共有1个答案

施俊哲
2023-03-14

当然有办法。在插入MongoDB之前,您需要自己生成ObjectId。下面的示例

case class Person (_id: BSONObjectID, name: String)

object Person {
   implicit val PersonFormat = Json.format[Person]
}

val p = Person(BSONObjectID.generate, "Mac")

save(p)
 类似资料:
  • 我必须在mongob上执行查询,我想只选择一个具有特定_id的文档(类型为ObjectId)。 我使用“严格模式”sintax,特别是运算符$oid用于将_id与字符串进行比较。 但是它不起作用!,我现在不知道它是一个错误(一袋mongo-c-drive/mongo-delphi-drive)还是我在ObjectId字段上编写了错误的查询代码。 在一个简单的代码片段下面,存在具有_id的文档,但b

  • 有没有办法使用springmongo将新字段添加到所有现有文档中。 寻找类似的东西 db.collection.update({"all_document"},

  • 问题内容: 我在使用批量API(C#NEST v5.4)插入文档时遇到问题。我有一个文档数组,在数组中有我的ID。 我的代码是: 如何 使用描述符手动 插入 _id ? 提前致谢! 问题答案: 您可以使用类似的方法在上设置索引名称。鉴于以下POCO 例如,使用递增计数器设置ID 产生以下请求

  • 使用MongoDB,我希望找到一个集合中的所有文档,这些文档的id显示在另一个集合中的子文档数组中。在这里使用$in操作符并不真正有效,因为我只尝试匹配子文档中的单个值。 假设我有以下来自db.foos文档: 以下是db.bars: 我想在数据库中查找所有文档。可以在foo数组中找到具有_id的bar(在本例中,返回具有_id1和3的db.bar)。大概是这样的: 当然,那是行不通的。我该如何着手

  • 我正在使用Deploy azure应用程序服务在Team Services中插入构建步骤,我希望能够将PackageAsSingleFile设置为False来构建我的解决方案。但是,当我尝试使用创建的工件的路径发布包时,我得到“未找到具有指定模式的包”。 我是否需要创建两个项目,一个作为zip文件,一个作为文件包才能做我想做的事情?我已经尝试了不同的文件夹路径,但无论如何我都会得到相同的错误。

  • 当设置组件的初始状态时,使用通过道具传入的数据,我是否应该创建一个新的对象,执行类似于... 或者这样做是安全的...