- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试在 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/
我尝试在文档数组中查找一个对象,并更新其字段。 db.rescuemodels.findAndModify({ query: { "features": {
在 mongodb 手册上有一个用于对单个文档进行原子操作的 example。 book = { _id: 123456789, title: "MongoDB
我正在尝试使用 findAndModify 修改多个文档,然后返回修改后的新文档。我的查询是: db.users.findAndModify({ query: { _id: {
findAndModify() 提供什么类型的锁定?是只写锁还是读/写?它会阻止对同一记录的同时更新吗? 最佳答案 MongoDB 有一个全局(每个实例)写锁,它序列化服务器中所有数据的所有更新(尽管
我有一个包含许多文档的集合,每个文档都包含一个数组,我想从每个文档的数组中删除最低值。 实现此目标的最有效方法是什么? findAndModify 是否能够执行此类操作? 我需要使用 forEach
我的 MongoDB 集合用作作业队列,有 3 台 C++ 机器从这个集合中读取数据。问题是这三个人不能执行相同的工作。所有作业只需完成一次。 我通过使用“isDone:False”在集合中搜索所有记
假设文档的结构如下: {_id:"session-01", status:"free"} 并且有 2 个并发操作执行下面的 findAndModify 操作:db.collection.findAnd
我有以下代码: var roomDoc = Rooms.findAndModify({ query: {name: roomName}, update: {$setOnInsert: {uni
当使用 MongoTemplate - collection.findAndModify 时,它将删除所有文档字段,只保留更新的列。 这是为什么呢? 如何部分更新文档中的字段? DBC
我使用 python 2.6.6、pymongo 1.9、mongodb 1.6.5、Ubuntu 10.10 我在使用 FindAndModify 命令时遇到了奇怪的问题。 我有两个相同的进程同时运
我正在尝试将 findAndModify 与 node.js mongodb 模块 monk 一起使用。这是我正在使用的方法,它会抛出一个 500cmd 中的 错误: notesCollectio
我的 MongoDB 数据库中有一个集合,其中包含多个键。现在我想用一个新字段更新这个集合。所以这是我到目前为止所拥有的: def confirm(hash: String) = { va
我想弄清楚是否有可能在 MongoDB 中推送一个元素并同时(原子 FindAndModify 操作)更新数组中元素的最大值。 例子: { "_id": "...", "max_value":
有没有办法将 mongo 的 findAndModify 应用于每个符合条件的文档,而不仅仅是第一个文档?我在 mongodb.org 上找不到它。 谢谢。 最佳答案 您可以使用 update()多参
我正在 Node 中创建一个包含一些 CRUD 组件的应用程序。在我的一个数据对象上,我有一个 save() 方法,如果对象具有在集合中找到的 id,则更新记录,如果没有,则更新插入新文档。此外,如果
我需要使用 mongodb 查找并修改第一个匹配的元素。可能吗?我没能从官方文档中找到如何操作:http://www.mongodb.org/display/DOCS/findAndModify+Co
我有一个用 Java 编写并使用 MongoDB 3.4 副本集的任务 worker ,该副本集运行许多线程,每个线程基本上都在执行此操作。 运行任务 通过在 MongoDB 中更新该任务的文档来表示
我在 MongoDB 中的多个并发进程中使用 FindAndModify。集合大小约为 300 万个条目,只要我不通过排序选项(通过索引字段),一切都会像爆炸一样运行。一旦我尝试这样做,就会在日志中生
我正在尝试在嵌套数组中查找记录,对其进行修改,然后进行投影。 假设我有以下收藏: { "_id" : ObjectId("56558dfc45a06f51decb4ab7"), "ar
在我当前的应用程序中,我对 MongoDB 服务器进行了以下 MongoDB FindAndModify 调用 public static TEntity PeekForRemoveSync(this
我是一名优秀的程序员,十分优秀!