2016-01-01 6 views
0

Итак, у меня есть коллекция под названием «пользователи». Где он перечисляет список пользователей и информацию профиля. Они все хранятся внутри mongodb. Я хочу добавить вариант, где они могут добавить больше изображений в свой профиль. Например, я просто хочу добавить в «элемент» внутри коллекции дополнительный «4»: «newpicture.png» в «Документы». Как добавить подраздел к этому элементу без необходимости переписывать все данные?Как добавить данные в уже существующий элемент в mongodb

Eample текущих данных

{ 
    "name": "Oran", 
    "username": "Oran.Hammes", 
    "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/brandonflatsoda/128.jpg", 
    "email": "[email protected]", 
    "dob": "1953-03-21T17:40:17.020Z", 
    "phone": "364-846-1607", 
    "address": { 
    "street": "Schultz Stream", 
    "suite": "Suite 618", 
    "city": "North Muriel mouth", 
    "zipcode": "06447-1081", 
    "geo": { 
     "lat": "57.1844", 
     "lng": "-56.8890" 
    } 
    }, 
    "website": "misty.net", 
    "company": { 
    "name": "Hettinger, Reilly and Stracke", 
    "catchPhrase": "Multi-tiered system-worthy database", 
    "bs": "best-of-breed evolve e-markets" 
    }, 
    "Documents":{ 
    "1":"image.png", 
    "2":"Test.jpg", 
    "3":"Next.png" 
    } 
} 

с .update ({имя пользователя: "Oran.Hammes"}, {$ установить: { "Documents": { "4": "newpicture.png"} }})

enter image description here

ответ

2

Mongo имеет часть своей команды обновления для обновления значений в одном документе. Вы можете прочитать больше об изменении документов здесь: https://docs.mongodb.org/manual/tutorial/modify-documents/

Примером может быть:

db.users.update(
    { "username": "Oran.Hammes" }, 
    { 
     $set: { 
      "Documents.4" : "newpicture.png" 
     } 
    } 
) 

Что касается того, или нет, вам нужно будет переписать данные, относятся к этому вопросу: Does MongoDB $set write just the field or the whole document?. В основном это зависит от того, как вы настраиваете свою базу данных и сколько памяти выделяется для каждого документа.

+0

db.users.update ({имя пользователя: "Oran.Hammes"}, {$ set: {"Documents.4": "newpicture.png"}}). Я не получаю ошибки, но данные не меняются. – John

+1

db.users.update ({"username": "Oran.Hammes"}, {$ set: {"Documents.4": "newimage.jpg"}}); Работал – John

+0

ahh извините за опечатку. –

2

вы можете использовать db.collection.update:

db.users.update(
    { "username": "Oran.Hammes" }, 
    $set: { "Documents.4": "newimage.jpg" } }); 

первый curly - это фильтр, чтобы получить ссылку на вашу запись (называемый документом в MongoDB), а затем вы добавляете только новые элементы в свою запись. Надеюсь, это поможет.

+0

если имя пользователя уникально в вашей коллекции, все в порядке, но лучший способ ссылаться на вашу запись, используя ее _id, конечно. –

+0

Это не сработает, так как ** весь ** документ будет заменен на '{" Документ ": {" 4 ":" newimage.jpg "}}' – JagsSparrow

+0

право, я забыл добавить $ set, thx для предупреждения , я отредактировал свой ответ –

Смежные вопросы