Два поля "id" в одной коллекции MongoDB с Rails 3? - PullRequest
1 голос
/ 12 октября 2011

У меня есть проект Rails 3.0.9, использующий последнюю версию MongoDB и Mongoid 2.2.

Я импортировал CSV с полем «id» в коллекцию MongoDB с именем College, в результате чего была получена коллекция:

{ "_id" : ObjectID("abc123"), "id" : ######, ... }

Наблюдения:

  1. Действие show приводит к URL-адресу, использующему ObjectID
  2. При отображении 'College.id' в index.html.erb отображается ObjectID

Вопросы:

  1. Как использовать исходное поле "id" в качестве параметра
  2. Является ли "id" зарезервированным MongoDB, то есть мне нужно переименовать поле "id" в Коллекция колледжа (возможно, для «кодирования») - если да, то как?

Спасибо!

Обновление

Ответ:

db.colleges.update( { "name" : { $exists : true } } , { $rename : { "id" : "code" } }, false, true )

Я использовал «имя», так как это было поле, которое я мог проверить на существование.

1 Ответ

2 голосов
/ 12 октября 2011

_id является зарезервированным и обязательным свойством в MongoDB - я думаю, что mongoid отображает id на _id, поскольку это имеет смысл.Возможно, есть способ получить доступ к свойству id через mongoid, но я думаю, что вам лучше переименовать столбец id во что-то другое, чтобы избежать путаницы в будущем.

{ $rename : { old_field_name : new_field_name } }

переименует имя поля вdocument (mongo 1.7.2 +).

, поэтому

db.college.update({ "_id" : { $exists : true }}, { $rename : { 'id' : 'code' } }, false, true);

должен обновить каждую запись в этой коллекции и переименовать поле id в код.

(очевидно, проверьте этоперед запуском любых важных данных)

...