Как вставить новый объект, не удаляя предыдущий - PullRequest
1 голос
/ 09 апреля 2019

Я настраиваю свой новый сервер RocketChat.

Проблема в том, что на самом деле Rocket Chat не поддерживает учетную запись CAS, если они не созданы CAS.

У нас есть старые учетные записи.

Я могу добавить функцию CAS, выполнив следующее:

Войдите в базу данных MongoDB с программным обеспечением MongoDB Compass в Windows и добавьте объект cas вобъект services с моей клавиатурой ...

https://i.imgur.com/AIMAlA6.png

Итак, как вы можете видеть, я могу добавить функцию CAS, выполнив это.

Я хочу сделать это с помощью кода, поэтому я сделал это:

1 - Войдите в docket rocketchat_mongo

2 - Соединитесь с администратором и используйте базу данных rocketchat

3 - Выполнить этот код

db.users.update({"name":"Fabien Rousseau"},{ $set: {"services" : { "cas" : { "external_id" : "fabien.rousseau", "version" : 2 }}}})

Команда в порядке, потому что объект CAS добавляется в службы, НО, он удаляет другой объект, такой как пароль, и возобновляет ...

Я простохочу добавить объект CAS без удаления других объектов ...

Мой ожидаемый результат на первом изображении: учетная запись с CAS.

На самом деле после команды у меня это:

https://i.imgur.com/vA1i3mx.png

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

1 Ответ

0 голосов
/ 10 апреля 2019

Вы передаете все services (включая все остальные поля) в $set, и в результате вы сбрасываете все поля, вложенные в services. Попробуйте передавать только те данные, которые вы хотите обновить / добавить в документ, используя точечную запись.
документация по комплекту говорит

Чтобы указать поле во встроенном документе или в массиве, используйте точечную запись.

db.users.update({"name":"Fabien Rousseau"},{ $set: { "services.cas" : { "external_id" : "fabien.rousseau", "version" : 2 }}})
...