Можно ли использовать 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);
работает отлично, хотя вам приходится самостоятельно обрабатывать конфликты. Затем вы можете использовать прямые сравнения строк по мере необходимости.