使用ReplaceOne执行Upsert,但如果存在记录,则递增字段之一

问题描述 投票:0回答:1

我正在我的收藏夹中制作一个upsert,但是如果该商品已经在收藏中,我还想增加一个计数器。

我有这个:

var user = new User(...);
users.ReplaceOne<User>(
  u => u.Id == user.Id,
  user,
  new ReplaceOptions { IsUpsert = true }
);

说User对象有一个类似'LikeCount'的字段。如果记录存在,我想增加此值,可以通过upsert进行吗?

c# mongodb
1个回答
1
投票

您可以使用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});
© www.soinside.com 2019 - 2024. All rights reserved.