Можно ли использовать Mongo "Object ID" в качестве своего уникального идентификатора? Если да, то как я могу преобразовать его в строку и посмотреть ее по строке?

Например...

user/view/?id=324gijsdfi3h25o1

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

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

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

Ответы

Ответ 1

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

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

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

Вы не должны преобразовывать ObjectId в базу данных в строку, а затем сравнивать ее с другой строкой. Если вы это сделаете, MongoDB не сможет использовать индекс _id, и ему придется сканировать все документы, что приводит к низкой производительности запросов.

Ответ 2

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

Можно ли использовать Mongo "Object ID" в качестве своего уникального идентификатора?

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

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

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

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

Ответ 3

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

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

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