我想在MongoDB中执行这样的操作:
通过查询{"name": "A.C. Abracus"}
查找数据。如果数据不存在,它将使用$setOnInsert
在数据库中创建数据。如果数据存在,它将使cmtCount增加1,同时将新的point
值与数据库中现有的point
进行比较,以选择其中的最小值并更新{最小值的{1}}字段。
MongoDB中的数据如下:
point
>db.scores.find()
我用
{ "_id" : ObjectId("5d08a9c83bb571704b774a60"), "name" : "A.C. Abracus", "assignment" : 5, "cmtcount" : 1, "point" : 33 }
尝试了诸如findOneAndUpdate
和update
之类的操作,但没有达到我的期望。喜欢:
$set, $setOnInsert, $inc, $min
我希望结果是这样的:
db.scores.update(
{"name": "A.C. Abracus"},
{
$min: {"point": 10},
$inc: {"cmtcount": 1},
$setOnInsert: {"name": "A.C. Abracus", "assignment": 5, "point": 33}
},
{upsert: true}
)
但这发生了错误
{ "_id" : ObjectId("5d08a9c83bb571704b774a60"), "name" : "A.C. Abracus", "assignment" : 5, "cmtcount" : 2, "point" : 10 }
我认为可能是因为当数据不存在时,它同时运行"Updating the path 'point' would create a conflict at 'point'"
,$setOnInsert
和$min
。因此发生冲突。
如何解决此问题?谢谢!