首页 > 解决方案 > 如何正确配置 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 处理器以使查询不会产生上述错误?

标签: javascriptmongodbapache-nifi

解决方案


您正在尝试修改类似于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

在此处输入图像描述


推荐阅读