Строка Node.js Mongoose.js для функции ObjectId

97

Есть ли функция, чтобы превратить строку в objectId в node с помощью mongoose? В схеме указано, что что-то является ObjectId, но когда оно сохраняется из строки, монго говорит мне, что это все еще просто строка. _id объекта, например, отображается как objectId("blah").

Теги:
mongoose

5 ответов

235
Лучший ответ

Вы можете сделать это так:

var mongoose = require('mongoose');
var id = mongoose.Types.ObjectId('4edd40c86762e0fb12000003');
  • 0
    Да, это немного чище в этом случае. Может понадобиться использовать только mongo.BSONPure, если выполняется fromTime ()
  • 3
    Выдает ли это ошибку, если это неверная строка? Ищите лучший способ проверки ввода в REST API для полей идентификатора Монго.
Показать ещё 4 комментария
9

Вы можете сделать это следующим образом:

var mongoose = require('mongoose');
var _id = mongoose.mongo.BSONPure.ObjectID.fromHexString("4eb6e7e7e9b7f4194e000001");

EDIT: новый стандарт имеет fromHexString, а не fromString

  • 1
    Что ж, еще более «новым» стандартом является mongoose.mongo.BSONPure.ObjectID.createFromHexString () (по состоянию на mongoose 3.9.7)
  • 1
    Для тех, кто пытается это сделать, это гораздо лучший ответ, чем выбранный ответ, потому что он не изменит идентификатор, если вы уже используете идентификатор Монго.
Показать ещё 1 комментарий
5

Судя по комментариям, вы ищете:

mongoose.mongo.BSONPure.ObjectID.isValid

или

mongoose.Types.ObjectId.isValid
2

Я не мог разрешить этот метод (по общему признанию, я долго не искал)

mongoose.mongo.BSONPure.ObjectID.fromHexString

Если ваша схема ожидает, что свойство имеет тип ObjectId, преобразование неявно, по крайней мере, это похоже на случай 4.7.8.

Вместо этого вы можете использовать что-то вроде этого, что дает немного больше гибкости:

function toObjectId(ids) {

    if (ids.constructor === Array) {
        return ids.map(mongoose.Types.ObjectId);
    }

    return mongoose.Types.ObjectId(ids);
}
1
var mongoose = require('mongoose');
var _id = mongoose.mongo.ObjectId("4eb6e7e7e9b7f4194e000001");
  • 2
    Это точно так же, как принятый ответ
  • 2
    Не могли бы вы прокомментировать разницу между mongoose.Types.ObjectId и mongoose.mongo.ObjectId ? Свойства объекта mongoose различны, но они могут ссылаться на тот же метод внизу. Пожалуйста, прокомментируйте основные методы на Types против mongo .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню