вставить новое поле в базу данных mongodb - PullRequest
1 голос
/ 29 мая 2020

Я новичок в mongodb и pymon go, и я работаю над проектом, в котором у меня есть коллекция студентов mongodb. Я хочу добавить новое поле и, в частности, адрес студента к каждому элементу в моей коллекции (поле, очевидно, добавляется везде как null и будет заполнено мной позже).

Однако, когда я попытаюсь используя этот пример c для добавления нового поля, я получаю следующую синтаксическую ошибку:

 client = MongoClient('mongodb://localhost:27017/') #connect to local mongodb

 db = client['InfoSys']   #choose infosys database
 students = db['Students']

 students.update(  {  $set : {"address":1} }  ) #set address field to every column (error happens here)

Как исправить эту ошибку?

Ответы [ 3 ]

1 голос
/ 29 мая 2020

Предыдущий ответ здесь точен, но похоже, что ваш вопрос может больше относиться к PyMon go и к тому, как он управляет обновлениями коллекций. https://pymongo.readthedocs.io/en/stable/api/pymongo/collection.html

Согласно документам, похоже, вы можете использовать функцию update_many (). Вам все равно нужно будет сделать свой запрос (в данном случае все документы) в качестве первого аргумента, а второй аргумент - это операция, выполняемая для всех записей.

client = MongoClient('mongodb://localhost:27017/') #connect to local mongodb

db = client['InfoSys']   #choose infosys database
students = db['Students']

sudents.update_many({}, {$set : {"address":1}})
1 голос
/ 29 мая 2020

Вы неправильно используете операцию обновления. Операция обновления имеет следующий синтаксис:

db.collection.update(
   <query>,
   <update>,
   <options>
)

Основной параметр <query> вообще не упоминается. Он должен быть как минимум пустым, например {}. В вашем случае будет работать следующий запрос:

db.students.update(
  {}, // To update the all the documents.
  {$set : {"address": 1}}, // Update the address field.
  {multi: true} // To do multiple updates, otherwise Mongo will just update the first matching document.
)

Итак, в python вы можете использовать update_many для этого. Итак, это будет так:

students.update_many(
  {},
  {"$set" : {"address": 1}}
)

Подробнее об этой операции можно прочитать здесь .

0 голосов
/ 29 мая 2020

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

 cursor = students.find({})
 for student in cursor :
      students.update_one(student, {'$set': {'address': '1'}})    
...