String Node.js Mongoose.js para a função ObjectId

174

Existe uma função para transformar uma string em um objectId no nó usando o mangusto? O esquema especifica que algo é um ObjectId, mas quando é salvo de uma string, o mongo me diz que ainda é apenas uma string. O _id do objeto, por exemplo, é exibido como objectId("blah").

JRPete
fonte

Respostas:

419

Você pode fazer assim:

var mongoose = require('mongoose');
var id = mongoose.Types.ObjectId('4edd40c86762e0fb12000003');
Kevin Dente
fonte
Sim, isso é um pouco mais limpo neste caso. Só precisa usar o mongo.BSONPure se fazendo fromtime ()
talentedmrjones
3
Isso gera um erro se for uma sequência inválida? Procurando a melhor maneira de fazer a validação de entrada em uma API REST para os campos mongo id.
Zambonilli 21/07
1
Realmente não responde à pergunta porque, usando essa metodologia, a string será convertida e não será a mesma que a original.
ed209
mongoose.Types.ObjectId (id) mas meu id é indefinido, então o que ele retornará? nova identificação ou erro
Keval Bhatt
@KevinDente Estou usando o Nodejs com TypeScript, tentei sua solução, mas ainda estou obtendo uma string e minha consulta não retorna o que deve retornar. alguma idéia de como fazê-lo em texto datilografado?
SOufiane Fadil
9

Você pode fazer assim:

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

EDIT: novo padrão tem fromHexString em vez de fromString

talentmrjones
fonte
1
Bem, ainda mais "novo" padrão parece ser mongoose.mongo.BSONPure.ObjectID.createFromHexString () (a partir do mongoose 3.9.7)
Evereq
1
Para aqueles que estão tentando fazer isso, essa é uma resposta muito melhor do que a resposta selecionada, porque não transformará o ID se você já estiver usando um ID do mongo.
ed209
1
Isso funciona não mais, use a resposta aceita vez
paper1111
O BSONPure não faz parte de mongoose.mongomim. Alguém pode confirmar?
Artur Tagisow 13/05/19
5

A julgar pelos comentários, você está procurando:

mongoose.mongo.BSONPure.ObjectID.isValid

Ou

mongoose.Types.ObjectId.isValid
AT
fonte
5
var mongoose = require('mongoose');
var _id = mongoose.mongo.ObjectId("4eb6e7e7e9b7f4194e000001");
a vapor
fonte
3
Você poderia comentar sobre a diferença entre mongoose.Types.ObjectIde mongoose.mongo.ObjectId? As propriedades do objeto do mangusto são diferentes, mas podem estar fazendo referência ao mesmo método abaixo. Por favor, comente sobre os métodos subjacentes sobre Typesvs mongo.
steampowered
5

Não consegui resolver esse método (reconhecidamente não procurei por muito tempo)

mongoose.mongo.BSONPure.ObjectID.fromHexString

Se o seu esquema espera que a propriedade seja do tipo ObjectId, a conversão está implícita, pelo menos isso parece ser o caso em 4.7.8.

Você pode usar algo assim, no entanto, o que dá um pouco mais de flexibilidade:

function toObjectId(ids) {

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

    return mongoose.Types.ObjectId(ids);
}
Billy Jake O'Connor
fonte
3

Você também pode usar isso

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

é a maneira mais simples de fazer isso

Ash18
fonte
0

Basta ver o snippet de código abaixo se você estiver implementando uma API REST por meio de express e mangusto. (Exemplo para 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
})
}
...

Espero que ajude

Manoj Kumar
fonte