假设我在收藏夹中有此条目:
{
"_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逻辑,这不应该发生。
我如何防止越来越插入重复条目?代码有什么问题?