Изменение типа поля в коллекции в базе данных mongodb - PullRequest
2 голосов
/ 22 июля 2011

Тип поля в коллекции в моей базе данных mongodb - строка в юникоде.Это поле в настоящее время не имеет никаких данных, связанных с ним ни в одном из документов в коллекции.Я не хочу, чтобы тип был строковым, потому что я хочу добавить к нему подполя из своего кода на python, используя pymongo.

В коллекции уже есть много записей. Так, можно ли изменить типполе для чего-то вроде словаря в python для всех документов в коллекции?

Пожалуйста, помогите Спасибо

Ответы [ 2 ]

1 голос
/ 22 июля 2011

Я не уверен, что вы подразумеваете под "типом поля ... является строкой" и "в этом поле ... нет данных". Вы имеете в виду, что поле существует в ваших документах, но имеет пустую строку или null?

В любом случае MongoDB «без схемы», что означает, что он не будет применять какую-либо конкретную схему к вашим документам, даже если все документы в коллекции имеют одинаковую структуру.

Если вы используете фреймворк, требующий объявления схемы (MongoEngine, mongokit и т. Д.), Вам придется внести соответствующие изменения в ваше использование фреймворка, и нам нужно будет знать, какой фреймворк вы используете. Используешь.

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

{name: "dcrosta", address: null }

И вы хотите сделать address поддокументом. Вы можете сделать все это в одном обновлении:

db.people.update({address: None}, {'$set': {'address': {
     'street1': None,
     'street2': None,
     'city': None,
     'state': None,
     'zip': None,
}}}, multi=True)

(это в pymongo, точный синтаксис будет немного различаться в оболочке или в других драйверах)

1 голос
/ 22 июля 2011

Конечно, просто создайте скрипт, который перебирает вашу текущую коллекцию, читает существующее значение и перезаписывает его новым значением (встроенный документ в вашем случае). Вы меняете тип поля, просто устанавливая новое значение для этого поля. Например. установка строкового поля в целочисленное поле:

db.test.update ({поле: «строка»}, {$ set: {поле: 23}})

...