Как правильно настроить PutMongo, чтобы сделать upsert? - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь настроить процессор PutMongo (1.7.0), чтобы сделать переход в коллекцию. Я получаю эту ошибку: I get this error

Это моя конфигурация PutMongo:

enter image description here

Это то, чтовходящий потоковый файл выглядит следующим образом:

{"_id": {"compositeOne":"co", "compositeTwo": "ctr"}, "value": true}

Потоковый файл имеет следующий атрибут _id:

{"compositeOne":"co", "compositeTwo": "ctr"}

Коллекция TEST имеет документ с точно таким же содержимым, что и у потокового файла.

Я ожидал, что запрос на обновление пройдет, так как не вижу в этом ничего плохого, вместо этого я получаю вышеуказанную ошибку.

Я уже пытался воспроизвести это в оболочке Монго, используя этоquery:

    db.TEST.update({_id: {"compositeOne":"co", "compositeTwo": "ctr"}}, {_id: {"compositeOne":"co", "compositeTwo": "ctr"}, "value": true}, {upsert: true});

Этот запрос не вызывает ошибок. Как я могу настроить процессор PutMongo, чтобы запрос не выдавал ошибку выше?

1 Ответ

0 голосов
/ 04 ноября 2019

Вы пытаетесь изменить _id ключ , который похож на Первичный ключ .

Вы не можете обновить _id ключ как описание ошибкиговорит, что вы пытаетесь изменить неизменный объект.

Относительно запроса ниже

db.TEST.update({_id: {"compositeOne":"co", "compositeTwo": "ctr"}}, {_id: {"compositeOne":"co", "compositeTwo": "ctr"}, "value": true}, {upsert: true});

, когда вы пытаетесь выполнить upsert в mongodb, который уже имеет тот же документ, mongo justигнорирует его и не обновляет новые данные. Предположим, что вы пытаетесь обновить те же данные, Монго просто находит совпадение, но ничего не обновляет, как показано ниже.

Примечание: "nUpserted":0

enter image description here

...