如何使用ReactiveMongo正确上传

时间:2019-02-02 22:19:15

标签: mongodb scala reactivemongo

假设我在收藏夹中有此条目:

{
    "_id" : ObjectId("5c56160e4b6929067972b4c8"),
    "name" : "car",
    "attributes" : [
        {
            "color" : "blue",
            "qty" : 10
        }
    ]
}

我已经实现做UPSERT的代码如下所示:

  def insert(item: Item): Future[Option[Item]] = {
    val selector = BSONDocument("name" -> item.name, "attributes" -> BSONDocument("$elemMatch" -> Json.toJson(item.attributes.head)))

    val updateModifier = BSONDocument(
      f"$$push" -> BSONDocument("attributes" -> Json.toJson(item.attributes.head)))

    itemsCollection.flatMap(
      _.findAndUpdate(selector, updateModifier, upsert = true)
        .map(_.result[Item])
    )
  }

但是,执行此代码时,集合将更新如下:

{
    "_id" : ObjectId("5c56160e4b6929067972b4c8"),
    "name" : "car",
    "attributes" : [
        {
            "color" : "blue",
            "qty" : 10
        },
        {
            "color" : "blue",
            "qty" : 10
        }
    ]
}

请注意,添加了重复的条目。根据upsert逻辑,这不应该发生。

我如何防止越来越插入重复条目?代码有什么问题?

0 个答案:

没有答案