我正在我的收藏夹中制作一个upsert,但是如果该商品已经在收藏中,我还想增加一个计数器。
我有这个:
var user = new User(...);
users.ReplaceOne<User>(
u => u.Id == user.Id,
user,
new ReplaceOptions { IsUpsert = true }
);
说User对象有一个类似'LikeCount'的字段。如果记录存在,我想增加此值,可以通过upsert进行吗?
您可以使用UpdateOne
方法并传入Upsert=true
,但在更新过程中,您可以使用SetOnInsert
设置所有文档属性。
class User
{
public ObjectId Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public int Counter { get; set; }
}
var client = new MongoClient();
var database = client.GetDatabase("test");
var collection = database.GetCollection<User>("users");
var user = new User {Name = "My User", Age = 30};
var id = new ObjectId("507f1f77bcf86cd799439011");
var filter = Builders<User>.Filter.Eq(x => x.Id, id);
var update = Builders<User>.Update.Inc(x => x.Counter, 1)
.SetOnInsert(u => u.Name, user.Name)
.SetOnInsert(u => u.Age, user.Age);
await collection.UpdateOneAsync(filter, update, new UpdateOptions{IsUpsert = true});