javascript - 如何正确配置 PutMongo 以执行 upsert?
问题描述
我正在尝试将 PutMongo (1.7.0) 处理器配置为对集合进行更新插入。我收到此错误:
这是我的 PutMongo 配置:
这是传入流文件的样子:
{"_id": {"compositeOne":"co", "compositeTwo": "ctr"}, "value": true}
流文件具有以下 _id 属性:
{"compositeOne":"co", "compositeTwo": "ctr"}
TEST 集合有一个与流文件内容完全相同的文档。
我希望更新查询能够通过,因为我看不出它有任何问题,而是出现上述错误。
我已经尝试使用以下查询在 mongo shell 中重现它:
db.TEST.update({_id: {"compositeOne":"co", "compositeTwo": "ctr"}}, {_id: {"compositeOne":"co", "compositeTwo": "ctr"}, "value": true}, {upsert: true});
此查询不会产生错误。如何配置 PutMongo 处理器以使查询不会产生上述错误?
解决方案
您正在尝试修改类似于Primary key的_id键。
您无法更新_id 键,因为错误描述说您正在尝试修改不可变对象。
关于以下查询
db.TEST.update({_id: {"compositeOne":"co", "compositeTwo": "ctr"}}, {_id: {"compositeOne":"co", "compositeTwo": "ctr"}, "value": true}, {upsert: true});
当您尝试在已经具有相同文档的 mongodb 中执行 upsert 时,mongo 只是忽略它并且不更新任何新数据。假设您正在尝试更新相同的数据 mongo 只是找到匹配项但不更新任何内容,如下所示.
注意:“nUpserted”:0
推荐阅读
- python - 如何在 Python 中使用相对于另一个 webelement 的 xpath 来使用 selenium 显式驱动程序等待
- docker - 从 docker 内部启动新容器
- python - SpaCy 自定义 NER 训练 AttributeError:“DocBin”对象没有属性“to_disk”
- oracle - ORA-12541: TNS: 没有侦听器 - Oracle Instant Client
- tinymce - 在 TinyMCE 中拖放图像,在 macOS 上添加额外的跨度和字体标签
- node.js - 如果我删除组中的参与者,我正在创建一个群聊应用程序,该用户的配置文件也将被删除。这是我的群聊模式
- html - 对齐弹性盒的多个实例的内容
- python - 比较 views.py 中的 timezone.now() 和 models.py 中的 DateTimeField
- python - 如何将嵌套的 JSON 对象转换为 Pandas 中的行和列
- c++ - 移动元素的最佳方式是什么:整个向量或元素的移动+擦除?