gpt4 book ai didi

c# - MongoDB C# 驱动程序 FindAndModify

转载 作者:可可西里 更新时间:2023-11-01 10:07:37 24 4
gpt4 key购买 nike

我正在尝试在 MongoDB 中运行 FindAndModify 操作,但我遇到了一个不寻常的异常

var query = Query.EQ("_id", wiki.ID);
var sortBy = SortBy.Descending("Version");
var update = Update.Set("Content", wiki.Content)
.Set("CreatedBy", wiki.CreatedBy)
.Set("CreatedDate", wiki.CreatedDate)
.Set("Name", wiki.Name)
.Set("PreviousVersion", wiki.PreviousVersion.ToBsonDocument())
.Set("Title", wiki.Title)
.Set("Version", wiki.Version);
var result = collection.FindAndModify(query, sortBy, update, true);

我得到的异常是

WriteStartArray can only be called when State is Value, not when State is Initial
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidOperationException: WriteStartArray can only be called when State is Value, not when State is Initial

Source Error:

Line 45: var query = Query.EQ("_id", wiki.ID);
Line 46: var sortBy = SortBy.Descending("Version");
Line 47: var update = Update.Set("Content", wiki.Content)
Line 48: .Set("CreatedBy", wiki.CreatedBy)
Line 49: .Set("CreatedDate", wiki.CreatedDate)

想法?我已经根据 mongodb 网站上的 API 实现了这一点。

编辑——根据@jeffsaracco 修复

var update = Update.Set("Content", wiki.Content)
.Set("CreatedBy", wiki.CreatedBy)
.Set("CreatedDate", wiki.CreatedDate)
.Set("Name", wiki.Name)
.PushAllWrapped<WikiHistory>("PreviousVersion", wiki.PreviousVersion)
.Set("Title", wiki.Title)
.Set("Version", wiki.Version);

最佳答案

您使用 PushAllWrapped 的解决方案可能是您想要的,也可能不是您想要的。它与 Set 不同,因为它将新值附加到当前数组值。如果你想用一个新的数组值替换现有的数组值,你可以使用这个版本的 Set:

var update = Update.Set("Content", wiki.Content)
// other lines
.Set("WikiHistory", new BsonArray(BsonDocumentWrapper.CreateMultiple(wiki.PreviousVersion);

其中表示:将 WikiHistory 元素的值设置为通过序列化 PreviousVersion 自定义类型的包装值构造的新 BsonArray。

关于c# - MongoDB C# 驱动程序 FindAndModify,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7635254/

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