web-dev-qa-db-fra.com

Node.js Mongoose.js chaîne à la fonction ObjectId

Existe-t-il une fonction permettant de transformer une chaîne en objectId dans un nœud à l'aide de mangouste? Le schéma spécifie que quelque chose est un ObjectId, mais lorsqu'il est sauvegardé à partir d'une chaîne, mongo me dit qu'il ne s'agit toujours que d'une chaîne. Le _id de l'objet, par exemple, est affiché sous la forme objectId("blah").

140
JRPete

Vous pouvez le faire comme suit:

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

Vous pouvez le faire comme ça:

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

EDIT: La nouvelle norme a fromHexString plutôt que fromString

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

A en juger par les commentaires, vous recherchez:

mongoose.mongo.BSONPure.ObjectID.isValid

Ou

mongoose.Types.ObjectId.isValid
5
A T

Je ne pouvais pas 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 utiliser quelque chose comme ceci cependant, 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);
}
4
Billy Jake O'Connor