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
Вам не нужно использовать для извлечения документа сначала, просто используйте метод .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 или новее
Чтобы добавить к @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)
Вы можете просто сделать
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 создаст новый ключ.
tags
не существует, оно создается. @GauravOjha – styvane 9 January 2018 в 22:52