如何正确配置PutMongo进行upsert?

时间:2019-11-04 12:43:42

标签: javascript mongodb apache-nifi

我正在尝试配置PutMongo(1.7.0)处理器对集合进行upsert。我收到此错误:I get this error

这是我的PutMongo配置:

enter image description here

这是传入的流文件的样子:

{"_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处理器,以使查询不会产生以上错误?

1 个答案:

答案 0 :(得分:0)

您正在尝试修改_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

enter image description here