这是我到目前为止的代码。
var filter = Builders<UserEntity>.Filter.Where(s => s.user_bd_id == userid && s.entities_engaged.Any(i => i.item_bd_id == itemid));
var update = Builders<UserEntity>.Update.Set(s => s.entities_engaged[-1].engagement_weight, weight);
var result = await collection.UpdateOneAsync(filter, update);
这是集合:
{
"_id" : ObjectId("59efdf83cb5e19e2b840e6ed"),
"user_bd_id" : 0,
"entities_engaged" : [
{
"item_bd_id" : 10,
"engagement_weight" : 500.0
}
]
}
如果文档存在,entity_engaged子列表存在,并且列表中的子项存在,则一切正常。如何将此代码转换为upsert?我尝试使用
await collection.UpdateOneAsync(filter, update, new UpdateOptions { IsUpsert = true });
但它不起作用。
另外,我想知道如何增加engagement_weight
。上面的代码会覆盖该值,但我想使用类似engagement_weight = engagement_weight + 1