public ResultModel Add(MetaObject metaObject, BsonDocument bsons) { //错误信息返回值 HashSet <string> ErrorInfo = new HashSet <string>(); //获取到字段列表 var metaFields = metaFieldService.GetMetaFieldUpperKeyDicUnDeleted(metaObject.Id); for (int i = bsons.ElementCount - 1; i >= 0; i--) { var item = bsons.GetElement(i); string upperKey = item.Name.ToUpperInvariant(); if (metaFields.ContainsKey(upperKey)) { //检查字段的值是否符合字段类型 var checkResult = metaFieldService.CheckAndGetFieldValueByFieldType(metaFields[upperKey], item.Value); if (checkResult.IsSuccess) { //如果大小写不匹配,则都转化成配置的字段Code形式 if (!item.Name.Equals(metaFields[upperKey].Code)) { bsons.RemoveElement(item); bsons.Add(new BsonElement(metaFields[upperKey].Code, BsonValue.Create(checkResult.Data))); } else { //重置字段的真实类型的值 bsons.SetElement(new BsonElement(metaFields[upperKey].Code, BsonValue.Create(checkResult.Data))); } } else { bsons.RemoveElement(item); ErrorInfo.Add($"字段[{item.Name}]传递的值[{item.Value}]不符合字段定义的类型"); } } else { //如果字段不在配置字段中,则不进行添加 bsons.RemoveElement(item); ErrorInfo.Add($"字段[{item.Name}]不属于对象[{metaObject.Code}({metaObject.Name})]定义的字段"); } } //预置字段及其默认值 foreach (var item in metaFieldService.GetPresetFieldBsonElements()) { //如果传入的字段已经有了,那么这里就不预置了 if (!bsons.Contains(item.Name)) { bsons.Add(item); } } //补充字段 //bsons.SetElement(new BsonElement("_id", Guid.NewGuid().ToString()));//id已经补充到预置字段 bsons.SetElement(new BsonElement("MetaObjectCode", metaObject.Code)); db.GetCollectionBson(metaObject.Code).InsertOne(bsons); return(ResultModel.Success($"插入成功,日志:{string.Join(",", ErrorInfo)}")); }