Node.js Mongoose.js chaîne en fonction ObjectId


174

Existe-t-il une fonction pour transformer une chaîne en objectId dans node en utilisant mangouste? Le schéma spécifie que quelque chose est un ObjectId, mais quand il est enregistré à partir d'une chaîne, mongo me dit que ce n'est toujours qu'une chaîne. Le _id de l'objet, par exemple, est affiché sous la forme objectId("blah").

Réponses:


419

Vous pouvez le faire comme ceci:

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

Ouais, c'est un peu plus propre dans ce cas. Peut seulement avoir besoin d'utiliser le mongo.BSONPure si vous faites fromTime ()
talentedmrjones

3
Cela génère-t-il une erreur s'il s'agit d'une chaîne non valide? Vous recherchez le meilleur moyen de valider les entrées dans une API REST pour les champs d'identifiant mongo.
Zambonilli

1
Ne répond pas vraiment à la question car en utilisant cette méthodologie, la chaîne sera convertie et ne sera pas la même que l'original.
ed209

mongoose.Types.ObjectId (id) mais mon id est indéfini alors qu'est-ce qu'il retournera? nouvel identifiant ou erreur
Keval Bhatt

@KevinDente J'utilise Nodejs avec Typescript, j'ai essayé votre solution mais j'obtiens toujours une chaîne et ma requête ne renvoie pas ce qu'elle doit renvoyer. une idée sur la façon de le faire sur dactylographié?
SOufiane Fadil

9

Vous pouvez le faire comme ceci:

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

EDIT: Le nouveau standard a fromHexString plutôt que fromString


1
Eh bien, encore plus "nouveau" standard semble être mongoose.mongo.BSONPure.ObjectID.createFromHexString () (à partir de mangouste 3.9.7)
Evereq

1
Pour ceux qui tentent de le faire, c'est une bien meilleure réponse que la réponse sélectionnée car elle ne transformera pas l'identifiant si vous utilisez déjà un identifiant mongo.
ed209

1
Cela ne fonctionne plus, utilisez plutôt la réponse acceptée
papier1111

BSONPure ne fait pas partie de mongoose.mongopour moi. Quelqu'un peut-il confirmer?
Artur Tagisow

5

À en juger par les commentaires, vous recherchez:

mongoose.mongo.BSONPure.ObjectID.isValid

Ou

mongoose.Types.ObjectId.isValid

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

3
Pourriez-vous commenter la différence entre mongoose.Types.ObjectIdet mongoose.mongo.ObjectId? Les propriétés d'objet de la mangouste sont différentes, mais elles peuvent faire référence à la même méthode ci-dessous. S'il vous plaît commenter les méthodes sous - jacentes sur Typesvs mongo.
vapeur le

5

Je n'ai pas pu résoudre cette méthode (certes, je n'ai pas cherché longtemps)

mongoose.mongo.BSONPure.ObjectID.fromHexString

Si votre schéma s'attend à ce que la propriété soit de type ObjectId, la conversion est implicite, du moins cela semble être le cas dans 4.7.8.

Vous pouvez cependant utiliser quelque chose comme ça, ce qui donne un peu plus de flexibilité:

function toObjectId(ids) {

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

    return mongoose.Types.ObjectId(ids);
}

3

Vous pouvez également l'utiliser

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

c'est le moyen le plus simple de le faire


0

Consultez simplement l'extrait de code ci-dessous si vous implémentez une API REST via express et mangouste. (Exemple pour 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
})
}
...

J'espère que ça aide

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.