2010-12-29 2 views
4

У меня есть список магазинов и вам нужно добавлять примечания к ним. Эти заметки должны иметь идентификатор, чтобы их можно было редактировать и удалять - это для веб-приложения, где параметр id будет содержать строку, используемую для идентификации объекта. Я не слишком хорошо знаком с MongoDB, но думал, что эти заметки на карте с ObjectId в качестве ключа будут легким решением для этого. Пожалуйста, поправьте меня, если в MongoDB есть лучший способ сделать это.MongoDB - Можно ли использовать ObjectId в качестве ключа?

В любом случае, когда я пытаюсь использовать (новый ObjectId()) в качестве ключа, я получаю ошибку «недопустимый идентификатор свойства» в оболочке.

db.locations.update({_id: 'store1'}, {$set: {'notes': {(new ObjectId()): 'note1'}}}) 

Любые идеи о том, что я делаю неправильно?

+0

Вы решили свою проблему? –

ответ

4

Ключи всегда строки в MongoDB. Чтобы установить вложенное поле, вы должны объединить строки вместе.

db.locations.update({_id: 'store1'}, {$set: {'notes.' + (new ObjectId()).toString(): 'note1'}}) 
+0

Скотт, это, похоже, не работало для меня в 1.6. Это как если бы он не оценивал выражение, где находится ключ. Ваш комментарий о ключах всегда является строкой - это тот ответ, который я искал. – Bradford

+0

Возможно, вам понадобится использовать для этого другую конструкцию. Это был просто концептуальный пример. –

0

пытаются использовать что-то вроде этого

db.locations.update({_id: 'store1'}, {$set: {'notes': { _id : ObjectId("47cc67093475061e3d95369d")}}}) 

проверки this link для получения более подробной информации

+1

Спасибо за ответ, galimy. Фрагмент, который вы указали выше, использует ObjectId как значение вместо ключа. Я хочу использовать ObjectId в качестве ключа для упрощения ссылок. – Bradford

+0

Может быть, будет лучше, если вы будете использовать «_id» в качестве простой строки и создать индекс для этого свойства –

0

Для меня, похоже, у вас должен быть документ, где _id для заметок. Текущий идентификатор «store1» должен быть атрибутом этого документа. Другими словами, вам нужно настроить вашу схему здесь. Тогда вам не потребуется добавлять идентификатор объекта к заметкам. Это также поможет быстрее запросить этот документ.