Node.js Mongoose.js stringa per la funzione ObjectId


174

Esiste una funzione per trasformare una stringa in un objectId nel nodo usando mongoose? Lo schema specifica che qualcosa è un ObjectId, ma quando viene salvato da una stringa, mongo mi dice che è ancora solo una stringa. Il _id dell'oggetto, ad esempio, viene visualizzato come objectId("blah").

Risposte:


419

Puoi farlo in questo modo:

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

Sì, è un po 'più pulito in questo caso. Potrebbe essere necessario utilizzare mongo.BSONPure solo se lo fai da Time ()
talentedmrjones,

3
Questo genera un errore se si tratta di una stringa non valida? Alla ricerca del modo migliore per eseguire la convalida dell'input in un'API REST per i campi mongo id.
Zambonilli,

1
In realtà non risponde alla domanda perché utilizzando questa metodologia la stringa verrà convertita e non sarà la stessa dell'originale.
299,

mongoose.Types.ObjectId (id) ma il mio ID non è definito, cosa restituirà? nuovo ID o errore
Keval Bhatt il

@KevinDente Sto usando Nodejs con Typescript, ho provato la tua soluzione ma continuo a ottenere una stringa e la mia query non restituisce ciò che dovrebbe restituire. qualche idea su come farlo su dattiloscritto?
SOufiane Fadil,

9

Puoi farlo in questo modo:

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

EDIT: il nuovo standard ha fromHexString anziché fromString


1
Bene, ancora più "nuovo" standard sembra essere mongoose.mongo.BSONPure.ObjectID.createFromHexString () (a partire da mongoose 3.9.7)
Evereq

1
Per coloro che stanno tentando di farlo, questa è una risposta molto migliore rispetto alla risposta selezionata perché non trasformerà l'id se si sta già utilizzando un ID mongo.
299,

1
Questo non funziona più, usa invece la risposta accettata
paper1111

BSONPure non fa parte di mongoose.mongome. Qualcuno può confermare?
Artur Tagisow,

5

A giudicare dai commenti, stai cercando:

mongoose.mongo.BSONPure.ObjectID.isValid

O

mongoose.Types.ObjectId.isValid

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

3
Potresti commentare la differenza tra mongoose.Types.ObjectIde mongoose.mongo.ObjectId? Le proprietà dell'oggetto della mangusta sono diverse, ma potrebbero fare riferimento allo stesso metodo sottostante. Si prega di commentare i metodi sottostanti su Typesvs mongo.
potenziato a vapore il

5

Non sono riuscito a risolvere questo metodo (devo ammettere che non ho cercato a lungo)

mongoose.mongo.BSONPure.ObjectID.fromHexString

Se il tuo schema prevede che la proprietà sia di tipo ObjectId, la conversione è implicita, almeno questo sembra essere il caso in 4.7.8.

Tuttavia, potresti usare qualcosa del genere, che offre un po 'più di flessibilità:

function toObjectId(ids) {

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

    return mongoose.Types.ObjectId(ids);
}

3

Puoi usare anche questo

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

è il modo più semplice per farlo


0

Vedi lo snippet di codice seguente se stai implementando un'API REST tramite express e mongoose. (Esempio per 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
})
}
...

Spero che sia d'aiuto

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.