我有一个对象列表,每个对象都有一个订单。
我想以不同方式更新每个对象的记录。我尝试执行以下指示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]
}
答案 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;
}