我有一个EmployeeDetails集合。该集合有4个字段。我有一个包含前三个字段的筛选器。如果找到匹配的数据,我希望更新($set),否则插入(.SetOnInsert {upsert});然而是散装的。
EmpName:
EmpCompany:
EmpDesignation:
EmpSalary:
我想根据其他字段更新EmpSalary。同时,筛选数据将被批量发送。是否可以这样做w/o foreach循环。
我试过以下代码:
foreach( var filterData in filterDataArrayList)
{
var loadData = Builders<EmployeeModel>.Update
.SetOnInsert(x=>x.EmpSalary , Salary)
.SetOnInsert(x=>x.EmpName , Name)
.SetOnInsert(x=>x.EmpCompany , Company)
.SetOnInsert(x=>x.EmpDesignation , Designation)
var insertResult = await collection.UpdateOneAsync(
x=>x.EmpName == filterData.Name, x=>x.EmpCompany=filterData.Company, x=>x.EmpDesignation = filterData.Designation ), loadData,
new UpdateOptions() {IsUpsert=true});
if(loadData.upsertId==null && loadData.matchedCount==1)
{
var updateData = Builders<EmployeeModel>.Update
.Set(x=>x.EmpSalary , Salary)
var updateResult = await collection.UpdateOneAsync(
x=>x.EmpName == filterData.Name, x.EmpCompany=filterData.Company, x.EmpDesignation =filterData.Designation ), updateData)
}
这段代码运行良好。我想消除过滤器数据的foreach循环。这可能吗?
1条答案
按热度按时间0x6upsns1#
试试这个:
这个例子只是为了说明如何完成它,你也可以使用一种类型化的/更复杂的方式,就像你的例子一样