MongoDB学习笔记~官方驱动嵌套数组对象的更新

时间:2023-03-08 20:17:05

回到目录

对于数组对象mongodb本身是支持的,不过对于数组的更新,mongodb的Csharp驱动目前只支持一级,即你的对象里包含数组,而数组又包括数组,这表示两层,这在更新子数组时,Csharp驱动是不支持的,今天要说的就是如何让它支持子数组的更新,下面是我给出的数据结构

aaarticlea/png;base64,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" alt="" />

在Mongodb的Csharp驱动里,一般的更新方法如下

  update = new UpdateDocument {{ "$set",
new BsonDocument("OrderList.$.UserName","占占的订单")
}};
 mongoRepository.Collection.Update(query, update);

上面代码可以很快速的将指定的二级数组OrderList里的UserName字段更新,而如果你要更新OrderDetail就没那么容易了,Csharp驱支目前是不支持的,当然你肯定会照着葫芦画飘,但结果是失败的,就像下面的代码(失败,只有既望新版驱动了)

  update = new UpdateDocument {{ "$set",
new BsonDocument("OrderList.$.OrderDetail.ProductName","占占")
}};
 mongoRepository.Collection.Update(query, update);

结果是OrderDetail的ProductName没有发生任何变化,呵呵。

去找原因,去找资料,还好,找到了一个不错的说法,即要想更新数组内的数组,需要将对上级数据进行定位,如OrderList.0.OrderDetail,这表示下标为0的OrderList数组元素(一个实体)下的OrderDetail数组对象,当然这个下标可不是那么轻易能得到的,

我们需要对数组进行遍历,找到满足条件的后,进行break即可。

var mongoRepository = new MongoDB.Data.Core.MongoOfficialRepository<Person>();
var query = Query.EQ("OrderList._id", twoID);
var oo = mongoRepository.Collection.Find(query).FirstOrDefault();
var update = new UpdateDocument();
bool isExit = false;
for (int j = ; j < oo.OrderList.Count; j++)
{
var od = oo.OrderList[j].OrderDetail;
oo.OrderList[j].UserName = "大占占改呀";
for (int i = ; i < od.Count; i++)
{
if (od[i].Id == threeID)
{
od[i].ProductName = "大占占修改了订单21"; #region 先pull,再push
//update = new UpdateDocument {{ "$pull",
// new BsonDocument("OrderList."+j+".OrderDetail",
// new BsonDocument("_id",threeID))
// }};
//mongoRepository.Collection.Update(query1, update);
//update = new UpdateDocument {{ "$push",
// new BsonDocument("OrderList."+j+".OrderDetail",
// new BsonDocument(od[i].ToDictionary()))
// }};
//mongoRepository.Collection.Update(query1, update);
#endregion #region 直接set
update = new UpdateDocument {{ "$set",
new BsonDocument("OrderList.$.UserName",oo.OrderList[j].UserName)
}};
mongoRepository.Collection.Update(query, update); update = new UpdateDocument {{ "$set",
new BsonDocument("OrderList."+j+".OrderDetail."+i,
new BsonDocument(od[i].ToDictionary()))
}};
mongoRepository.Collection.Update(query, update);
#endregion
isExit = true;
break;
}
}
if (isExit)
break;
}

上面的代码,我们看到了有两种更新集合的方法,$pull和$push方法及$set方法,大家可以根据喜好进行选择,都可以实现我们的目的,ToDictionary是我封装的方法,意思是将类对象里的属性转换为字典,并做了mongodb的_id主键的处理,代码如下

/// <summary>
/// 将对象属性转换为字典
/// </summary>
/// <param name="o"></param>
/// <returns></returns>
public static Dictionary<String, Object> ToDictionary(this object o)
{
Dictionary<String, Object> map = new Dictionary<string, object>();
Type t = o.GetType();
PropertyInfo[] pi = t.GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo p in pi)
{
MethodInfo mi = p.GetGetMethod(); if (mi != null && mi.IsPublic)
{
if (p.Name == "Id")
map.Add("_id", mi.Invoke(o, new Object[] { }));
else
map.Add(p.Name, mi.Invoke(o, new Object[] { }));
}
}
return map;
}
}

对于mongodb的探索,还在继续...

回到目录