как добавить данные в существующий массив, используя pymongo [duplicate]

Ubuntu поставляется с версией PIP от precambrian, и именно так вам нужно обновить ее, если вы не хотите тратить часы и часы на отладку связанных с пиком проблем.

apt-get remove python-pip python3-pip
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
python3 get-pip.py

Как вы заметили, я включил информация для Python 2.x и 3.x

10
задан styvane 17 October 2015 в 17:20
поделиться

3 ответа

Вам не нужно использовать для извлечения документа сначала, просто используйте метод .update с оператором $push .

def update_tags(ref, new_tag):
    coll.update({'ref': ref}, {'$push': {'tags': new_tag}})

Поскольку обновление устарело вы должны использовать метод find_one_and_update или update_one , если вы используете pymongo 2.9 или новее

14
ответ дан styvane 19 August 2018 в 03:45
поделиться
  • 1
    Какая разница между двумя? Просто возвращаемое значение (документ - объект UpdateResult)? Когда вы используете то или другое? – stackoverflowwww 2 September 2016 в 09:16
  • 2
    Что произойдет, если поле «теги» не существует? – Gaurav Ojha 25 April 2017 в 11:55
  • 3
    Если поле tags не существует, оно создается. @GauravOjha – styvane 9 January 2018 в 22:52

Чтобы добавить к @ssytvane ответ и ответить @Guarav: вы можете добавить «upsert = True», если его не существует:

def update_tags(ref, new_tag):
    coll.update({'ref': ref}, {'$push': {'tags': new_tag}}, upsert = True)

или

def update_tags(ref, new_tag):
    coll.update_one({'ref': ref}, {'$push': {'tags': new_tag}}, upsert = True)
0
ответ дан Kiluvya.A 19 August 2018 в 03:45
поделиться
  • 1
    Благодарим вас за вклад в Stack Overflow. Обратите внимание, что ответы только на код не поощряются, потому что они не объясняют, как они разрешают проблему. Вместо того, чтобы ссылаться на другие ответы / комментарии, подумайте о том, чтобы обновить свой ответ, чтобы объяснить, что это делает и как он решает проблему, так что он является автономным ответом и по-прежнему имеет смысл в случае удаления другого ответа или комментария. – FluffyKitten 15 September 2017 в 02:32

Вы можете просто сделать

1) Если вы хотите добавить одну запись

def update_tags(ref, new_tag):
    coll.update({'ref': ref}, {'$push': {'tags': new_tag}})

, например:

{
    "_id" : ObjectId("561c199e038e42b10956e3fc"),
    "tags" : [ "tag1", "tag2", "tag3" ],
    "ref" : "4780"
}
>> update_tags("4780", "tag4")
{'updatedExisting': True, u'nModified': 1, u'ok': 1, u'n': 1}
>> coll.find_one({"ref":"4780"})
{
    "_id" : ObjectId("561c199e038e42b10956e3fc"),
    "tags" : [ "tag1", "tag2", "tag3" , "tag4" ],
    "ref" : "4780"
}

2) Если вы хотите для добавления нескольких записей

def update_tags(ref, new_tag):
    coll.update({'ref': ref}, {'$pushAll': {'tags': new_tag}}) #type of new_tag is list

например:

{
    "_id" : ObjectId("561c199e038e42b10956e3fc"),
    "tags" : [ "tag1", "tag2", "tag3" ],
    "ref" : "4780"
}
>> update_tags("4780", ["tag5", "tag6", "tag7"])
{'updatedExisting': True, u'nModified': 1, u'ok': 1, u'n': 1}
>> coll.find_one({"ref":"4780"})
{
    "_id" : ObjectId("561c199e038e42b10956e3fc"),
    "tags" : [ "tag1", "tag2", "tag3" , "tag4" , "tag5", "tag6", "tag7" ],
    "ref" : "4780"
}

Примечание: Если ключ еще не присутствует, то mongo создаст новый ключ.

1
ответ дан Nikhil Fulzele 19 August 2018 в 03:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: