如何使用C#更新BsonDocument中的BsonArray值?

时间:2019-06-16 23:03:02

标签: c# arrays mongodb updates

我将对象保存到具有结构的MongoDB文档中,该结构具有多个嵌套文档和包含文档的数组。考虑到我对这些对象进行了一些更新,我想将它们推送到DB中的亲戚文档中。 这里的目标是以原子方式做到这一点。

我设法做到非原子方式。示例:如果我想更新数组中包含的文档的某些值,没问题,我只需更新整个数组=>

Current_WantedBets[Cpt_Wanted].Event.Market.m_Players[PlayerProperties.Cpt].
p_Cycles.Add(new WantedDoc.EventClass.MarketClass.PlayerClass.CycleClass());

Current_WantedBets[Cpt_Wanted].Event.Market.m_Players[PlayerProperties.Cpt].
p_Cycles[CycleProperties.Cpt].c_CurrentLane = "Just an example";

Current_WantedBets[Cpt_Wanted].Event.Market.m_Players[PlayerProperties.Cpt].
p_Cycles[CycleProperties.Cpt].c_TimeStart = DateTimeOffset.Now;

Current_WantedBets[Cpt_Wanted].Event.Market.m_Players[PlayerProperties.Cpt].
p_Cycles[CycleProperties.Cpt].c_TimeEnd = DateTimeOffset.Now;

CycleProperties.c_Index_ThisEvent += 1;

filter = Builders<BsonDocument>.Filter.Eq("_id", Current_WantedBets[Cpt_Wanted].Id);

var update = Builders<BsonDocument>.Update
.Set("Event.Market.m_Players." + PlayerProperties.p_Position + ".p_Cycles",
Current_WantedBets[Cpt_Wanted].Event.Market.m_Players[PlayerProperties.Cpt].p_Cycles);

MatchbookStorage.DBContext.collections[MatchbookStorage.COL_CURRENT_WANTEDBETS].
UpdateOne(filter, update);

在这里,在我的对象中,p_Cycles是对象列表,并且是DB中的文档数组。这里的问题是我只能在一个复杂的对象中进行一次或两次更新,并将其反映回数据库,因此我会更新整个大数组……这不是一种原子方法。

我尝试使用原子方法失败,看起来像:

update = Builders<BsonDocument>.Update
       .Set("Event.Market.m_Players." + PlayerProperties.p_Position +
 ".p_Cycles[" + CycleProperties.Cpt + "].c_CurrentLane", "test")

       .Set("Event.Market.m_Players." + PlayerProperties.p_Position + 
".p_Cycles[" + CycleProperties.Cpt + "].c_TimeStart",
XmlConvert.ToString(DateTimeOffset.Now))

       .Set("Event.Market.m_Players." + PlayerProperties.p_Position + 
".p_Cycles[" + CycleProperties.Cpt + "].c_TimeEnd",
XmlConvert.ToString(DateTimeOffset.Now));

MatchbookStorage.DBContext.collections[MatchbookStorage.COL_CURRENT_WANTEDBETS].
UpdateOne(filter, update);

CycleProperties.Cpt在这里是整数。

这里的问题是,它没有在相关bsondocument的数组p_Cycles中存储我的更新,而是在数组旁边创建了一个名为p_Cycles[0]的嵌套bsondocument

您是否知道如何在数组的嵌套文档中进行这些更新而不更新整个数组?

0 个答案:

没有答案