我正在尝试更新ResolvedItems下的ErrorMessage字段,但我收到一个错误MongoDB驱动程序:不支持表达式。我尝试了下面的代码,如果我设置像BundleName这样的字段,它就可以工作。但是ErrorMessage无法这样做,因为它在多个地方,而且我不确定这个linq是否有问题。
MongoDB Collection :
{
"_id" :
{
"$oid": "97368836hsh987"
},
"Type": "DataModel",
"BundleId": "4587654",
"BundleName": "Work_Bundle"
"Collection":
{
"Items":[
{
"_id": "3046",
"ResolvedItems":[
{
"_id":"45687",
"Url": "abc@xyz.com",
"ErrorMessage": ""
},
{
"_id":"4789",
"Url": "def@xyz.com",
"ErrorMessage": ""
},
{
"_id":"9874",
"Url": "ghi@xyz.com",
"ErrorMessage": ""
}
]
}
]
}
}
My C# Code to update DB :
List<UpdateDefinition<DataModel>> updateDefinitions = new ();
foreach(string urlItem in liUrl)
{
updateDefinition = Builders<DataModel>.Update.Set( p=> p.Collection.Items.SelectMany(item => item.ResolvedItems.Where(resItem => resItem.Url.Equals(urlItem)).SelectMany(x=>x.ErrorMessage)), "ErrorMessage");
}
await DbConnection.UpdateByKey("BundleId","4587654", Builders<DatModel>.Update.Combine(updateDefinitions));
1条答案
按热度按时间pxq42qpu1#
对于MongoDB .NET驱动程序版本2.16及以上,它支持positional operator和
LinqProvider.V3
。先决条件:您需要在
MongoClientSettings
中启用LinqProvider.V3
。如果你使用的是2.16之前的版本,LINQ方式似乎很难实现,相反,你应该提供带有位置操作符的更新键。
updateDefinition
变量。*对于MongoDB查询: