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


174

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

Ответы:


419

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

var mongoose = require('mongoose');
var id = mongoose.Types.ObjectId('4edd40c86762e0fb12000003');

Да, это немного чище в этом случае. Может понадобиться использовать только mongo.BSONPure, если вы выполняете fromTime ()
talentedmrjones

3
Выдает ли это ошибку, если это неверная строка? Ищите лучший способ проверки ввода в API REST для полей идентификатора Монго.
Замбонилли

1
На самом деле не отвечает на вопрос, потому что при использовании этой методологии строка будет преобразована и будет отличаться от оригинала.
ed209

mongoose.Types.ObjectId (id), но мой идентификатор не определен, тогда что он вернет? новый идентификатор или ошибка
Кевал Бхатт

@KevinDente Я использую Nodejs с Typescript, я попробовал ваше решение, но все еще получаю строку, и мой запрос не возвращает того, что должен возвращать. Любая идея о том, как это сделать на машинописи?
Суфиане Фадил

9

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

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

РЕДАКТИРОВАТЬ: новый стандарт имеет fromHexString, а не fromString


1
Что ж, еще более «новый» стандарт выглядит как mongoose.mongo.BSONPure.ObjectID.createFromHexString () (по состоянию на mongoose 3.9.7)
Evereq

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

1
Это больше не работает, вместо этого используйте принятый ответ
paper1111

BSONPure не является частью mongoose.mongoдля меня. Кто-нибудь может подтвердить?
Артур Тагисов

5

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

mongoose.mongo.BSONPure.ObjectID.isValid

Или

mongoose.Types.ObjectId.isValid

5
var mongoose = require('mongoose');
var _id = mongoose.mongo.ObjectId("4eb6e7e7e9b7f4194e000001");

3
Не могли бы вы прокомментировать разницу между mongoose.Types.ObjectIdи mongoose.mongo.ObjectId? Свойства объекта mongoose различны, но они могут ссылаться на тот же метод внизу. Пожалуйста, прокомментируйте основные методы Typesпротив mongo.
SteamPowered

5

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

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);
}

3

Вы также можете использовать это

const { ObjectId } = require('mongodb');
const _id = ObjectId("4eb6e7e7e9b7f4194e000001");

это самый простой способ сделать это


0

Просто посмотрите фрагмент кода ниже, если вы реализуете REST API через Express и Mongoose. (Пример для ADD)

....
exports.AddSomething = (req,res,next) =>{
  const newSomething = new SomeEntity({
 _id:new mongoose.Types.ObjectId(), //its very own ID
  somethingName:req.body.somethingName,
  theForeignKey: mongoose.Types.ObjectId(req.body.theForeignKey)// if you want to pass an object ID
})
}
...

Надеюсь, поможет

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.