gpt4 book ai didi

c# - 使用 MongoDB 的官方 C# 驱动程序时重新保存的预期更新行为

转载 作者:太空宇宙 更新时间:2023-11-03 16:44:45 26 4
gpt4 key购买 nike

尝试了解重新保存先前保存的现有文档(来自 3 级以上对象图)的预期行为。更新仅应用于顶级字段还是尝试遍历嵌套对象更改?

var models = _database.GetCollection<Model>("Models");
var model = models.FindOneAs<Model>(Query.EQ("_id", new ObjectId("4df7bce0dc1c792230912fda")));

// Apply various changes on multi-level object graph...

models.Save(model);

尝试上述操作时,嵌套更改未应用于数据库。

最佳答案

我已经为你的问题构建了测试:

这是我保存到 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; }
}

关于c# - 使用 MongoDB 的官方 C# 驱动程序时重新保存的预期更新行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6378496/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com