C#/蒙戈。以不同方式更新相同字段的每条记录

时间:2017-12-14 20:47:08

标签: c# mongodb-.net-driver

我有一个对象列表,每个对象都有一个订单。

我想以不同方式更新每个对象的记录。我尝试执行以下指示here,但接受的答案会在我的订单字段中添加一个列表,而不是最新值。

我想要做的是以不同方式更新每个记录的订单属性。

类似的东西:

for (int i = 0; i < imageRecords.Count; i++)
{
    orderList.Add(increment * (i + 1));
}
var update = Builders<BsonDocument>.Update.Set("Order", orderList[i]);

[编辑]

我希望获得一张类似

的记录
{
 "id": 1,
 "order": 1
}
{
 "id": 2,
 "order": 2
}
{
 "id": 3,
 "order": 3
}

我目前得到的是:

{
 "id": 1,
 "order": [1, 2, 3]
}
{
 "id": 2,
 "order": [1, 2, 3]
}
{
 "id": 3,
 "order": [1, 2, 3]
}

1 个答案:

答案 0 :(得分:0)

您可以按如下方式为更新定义类:

class MyUpdate
{
    public FilterDefinition<MyOrder> Filter {get;set;}
    public UpdateDefinition<MyOrder> Update { get; set; }
}

然后列出它并用过滤器和更新填充它:

var myUpdates = new List<MyUpdate>()
{
    new MyUpdate(){ Filter = builder.Eq(x => x.Id, ObjectId.Parse("5a33b9bdec34269d4c03c939")),
        Update = Builders<MyOrder>.Update.Set(x=> x.Order, "First Order") },
    new MyUpdate(){ Filter = builder.Eq(x => x.Id,ObjectId.Parse("5a33b9ceec34269d4c03c941")),
        Update = Builders<MyOrder>.Update.Set(x=> x.Order, "Second Order") },
    new MyUpdate(){ Filter = builder.Eq(x => x.Id, ObjectId.Parse("5a33b9daec34269d4c03c944")),
        Update = Builders<MyOrder>.Update.Set(x=> x.Order, "Third Order") }
}

请注意,我的ID类型为ObjectId

然后你可以在这样的循环中调用UpdateOne

foreach (var update in myUpdates)
{
    var modified = context.MyOrder.UpdateOne(update.Filter, update.Update).ModifiedCount;
}