Я построил тест для вашей проблемы:
Вот документ, который я сохранил в mongodb (с массивом 3 уровня):
{
"_id": "4dfa48d1872b4a1a50f60033",
"NestedLevels": [
{
"Name": "Nested1",
"NestedLevels": [
{
"Name": "Nested2",
"NestedLevels": [
{
"Name": "Nested3",
"NestedLevels": []
}
]
}
]
}
]
}
Я загружаю его из c #, обновляю Name = Nested3 с другим значением и сохраняю обратно, после этого я читаю из mongodb обновленный документ, и он фактически обновился.Так что я думаю, проблема в какой-то другой части вашего кода.
Кстати: если вам нужно, я могу опубликовать здесь полный тест на c #.
Обновление:
Тестовый пример:
[TestMethod]
public void MongodbTest()
{
var mongoServer = MongoServer.Create("mongodb://localhost:27020");
var database = mongoServer.GetDatabase("StackoverflowExamples");
var levels = database.GetCollection("levels");
var level1 = new Level1();
var nested1 = new LevelX() { Name = "Nested1" };
var nested2 = new LevelX() { Name = "Nested2" };
nested1.NestedLevels.Add(nested2);
var nested3 = new LevelX() { Name = "Nested3" };
nested2.NestedLevels.Add(nested3);
level1.NestedLevels.Add(nested1);
levels.Insert(level1);
var item = levels.FindOneAs<Level1>();
item.NestedLevels[0].NestedLevels[0].NestedLevels[0].Name =
"Changed nested level 3 name";
levels.Save(item);
var itemAfterUpdate = levels.FindOneAs<Level1>();
Assert.AreEqual("Changed nested level 3 name",
itemAfterUpdate.NestedLevels[0].NestedLevels[0].NestedLevels[0].Name);
levels.RemoveAll();
}
Документы классов:
public class Level1
{
public Level1()
{
Id = ObjectId.GenerateNewId();
NestedLevels = new List<LevelX>();
}
[BsonId]
public Object Id { get; set; }
public List<LevelX> NestedLevels { get; set; }
}
public class LevelX
{
public LevelX()
{
NestedLevels = new List<LevelX>();
}
public string Name { get; set; }
public List<LevelX> NestedLevels { get; set; }
}