简体   繁体   English

MongoWriteException:写入操作导致错误。 位置运算符未从查询中找到所需的匹配项

[英]MongoWriteException: A write operation resulted in an error. The positional operator did not find the match needed from the query

I have a collection Zonedetails shown below. 我有一个收集的Zonedetails,如下所示。 below. 下面。

I am using C# to Insert or Update a Unit to Units array. 我正在使用C#插入或更新单位到单位数组。 If it is an insert I can insert Area blank. 如果是插入,我可以将Area插入空白。 If it is an update It should only update the UnitName. 如果是更新,则应仅更新UnitName。

{ 
    "Code" : "Zone1", 
    "Name" : "ZoneName1", 
    "Units" : [
        {
            "UnitCode" : "Unitcode1", 
            "UnitName" : "UnitCodeName", 
            "Areas" : [
                {
                    "AreaCode" : "AreaCode1", 
                    "AreaName" : "AreaName1"
                }
            ]
        }
    ]
}
{ 
    "Code" : "Zone2", 
    "Name" : "ZoneName2", 
    "Units" : [
        {
            "UnitCode" : "UnitCode2", 
            "UnitName" : "UnityName2", 
            "Areas" : [
                {
                    "AreaCode" : "Areacode2", 
                    "AreaName" : "AreaName2"
                }
            ]
        }
    ]
}
{ 
    "Code" : "Zone3", 
    "Name" : "ZoneName3", 
    "Units" : [
        {
            "UnitCode" : "UnitCode3", 
            "UnitName" : "UnitName3", 
            "Areas" : [
                {
                    "AreaCode" : "Areadcode3", 
                    "AreaName" : "AreaName3"
                }, 
                {
                    "AreaCode" : "AreaCode4", 
                    "AreaName" : "Areaname4"
                }, 
                {
                    "AreaCode" : "AreaCode5", 
                    "AreaName" : "Areaname5"
                }
            ]
        }, 
        {
            "UnitCode" : "UnitCode6", 
            "UnitName" : "UnitName6", 
            "Areas" : [
                {
                    "AreaCode" : "AreaCode10", 
                    "AreaName" : "AreaName10"
                }, 
                {
                    "AreaCode" : "AreaCOde11", 
                    "AreaName" : "AreaName10"
                }, 
                {
                    "AreaCode" : "AreaCode12", 
                    "AreaName" : "AreaName12"
                }
            ]
        }
    ]
}

I have writtent a C# code shown below. 我已经编写了如下所示的C#代码。 But getting " The positional operator did not find the match needed from the query "error if the Unit Code does not exist. 但是如果单元代码不存在,则会收到“ 位置运算符未从查询中找到所需的匹配项 ”错误。 Added not before unitCode check. 未在unitCode检查之前添加。

    var mongoCollection = _context.GetCollection<Zone>("ZoneDetail");
    var filter = Builders<Zone>.Filter.Where(x => x.Code == zoneCode && !x.Units.Any(u => u.UnitCode == unit.UnitCode));
    var updateUnitCode = Builders<Zone>.Update.Set(x => x.Units.ElementAt(-1).UnitCode, unit.UnitCode);
    var updateUnitName = Builders<Zone>.Update.Set(x => x.Units.ElementAt(-1).UnitName, unit.UnitName);
    var result = await mongoCollection.UpdateOneAsync(filter, Builders<Zone>.Update.Combine(updateUnitCode, updateUnitName), new UpdateOptions { IsUpsert = true});

Your error message suggest that filter is not able to find matching element. 您的错误消息表明筛选器无法找到匹配的元素。

Either try to change your input or change your filter criteria. 尝试更改您的输入或更改过滤条件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM