Можно ли использовать «Идентификатор объекта» Монго в качестве уникального идентификатора? Если так, как я могу преобразовать это в строку и посмотреть ее по строке? - PullRequest
16 голосов
/ 14 ноября 2010

Например ...

user/view/?id=324gijsdfi3h25o1

Я могу str() это ... но ...

Как я могу find поднять строку?

Редактировать: я хочу, чтобы у каждого документа в Mongo был уникальный идентификатор (обычно строка), на который я могу посмотреть. Я надеялся, что Object ID может быть таким (поскольку он имеет много букв и он уникален). И я хочу, чтобы он работал с HTTP GET. вид? UID = e93jfsb0e3jflskdjf

Ответы [ 3 ]

18 голосов
/ 14 ноября 2010

Вы можете создать новый ObjectId, используя строку.В этом примере используется консоль MongoDB:

db.users.find({ _id: ObjectId("4cdfb11e1f3c000000007822") })

По вашему вопросу я не могу сказать, какой языковой драйвер вы используете (если вообще используется), но большинство драйверов также поддерживают эту функцию.* Вы НЕ должны преобразовывать ObjectId в базе данных в строку, а затем сравнивать ее с другой строкой.Если вы сделаете это, MongoDB не сможет использовать индекс _id, и ему придется сканировать все документы, что приведет к снижению производительности запросов.

13 голосов
/ 16 ноября 2010

На ваши вопросы:

Можно ли использовать «Идентификатор объекта» Монго в качестве уникального идентификатора?

Да, он предназначен для этой цели.Создание уникальных идентификаторов может быть затруднительно в изолированных средах, поэтому MongoDB сделает это за вас.

Если это так, как я могу преобразовать его в строку и найти ее по строке?*

Не надо.Это не строкаMongoDB фактически позволяет вам переопределить идентификатор по умолчанию.Поэтому, если вы начнете искать #"4cdfb11e1f3c000000007822", Монго подумает, что вы ищете строку.Если вместо этого вы ищете ObjectId("4cdfb11e1f3c000000007822"), Mongo будет искать ObjectId (или MongoID).

В вашем вопросе похоже, что вы пытаетесь передать его в виде строки.Как вы преобразуете это в «объект», будет зависеть от вашего водителя.PHP имеет MongoId .Другие драйверы имеют аналогичную функцию.

0 голосов
/ 23 апреля 2013

ObjectId - это удобный способ создания уникального _id, но вы можете сделать это самостоятельно.Для вашего примера,

var o = {_id: Math.random().toString(36).substring(10)};
collection.insert(o, handleCollision);

работает нормально, хотя вы должны обрабатывать столкновения самостоятельно.Затем вы можете использовать прямое сравнение строк при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...