web-dev-qa-db-fra.com

id d'objet mongodb nodejs à la chaîne

IN nodejs, avec mongodb, mongoosejs as orm

Je fais ça

J'ai un modèle, utilisateur

User.findOne({username:'someusername'}).exec(function(err,user){
console.log(user) //this gives full object with something like {_id:234234dfdfg,username:'someusername'}
//but

console.log(user._id) //give undefined.
})

Pourquoi? Et comment obtenir le _id à la chaîne alors?

42
Swati Sharma

Essaye ça:

user._id.toString()

Un MongoDB ObjectId est un UUID de 12 octets pouvant être utilisé comme une représentation de chaîne HEX de 24 caractères. Vous devez le convertir en chaîne pour l'afficher dans console en utilisant console.log.

Donc, vous devez faire ceci:

console.log(user._id.toString());
71
Ionică Bizău

essayez ceci: objectId.str;

voir doc .

15
anubiskong

retirer le trait de soulignement et réessayer:

console.log(user.id)

De plus, la valeur renvoyée par id est déjà une chaîne, comme vous pouvez le voir ici .

Je l'utilise de cette façon et cela fonctionne.

À votre santé

15
AkerbeltZ

J'utilise mongojs, et j'ai cet exemple:

db.users.findOne({'_id': db.ObjectId(user_id)  }, function(err, user) {
   if(err == null && user != null){
      user._id.toHexString(); // I convert the objectId Using toHexString function.
   }
})

J'espère que cette aide.

15
Mauricio Giraldo

Si vous utilisez Mongoose, la seule façon d'être sûr d'avoir l'ID en tant que chaîne hexadécimale semble être:

object._id ? object._id.toHexString():object.toHexString();

En effet, object._id n'existe que si l'objet est rempli, sinon l'objet est un ObjectId

6
Cédric NICOLAS

Le résultat renvoyé par find est un tableau.

Essayez plutôt ceci:

console.log (utilisateur [0] ["_ id"]);

2
Giovanni Donelli

Lors de l'utilisation de mangouste.

Une représentation du _id est généralement sous la forme (côté client reçu)

{ _id: { _bsontype: 'ObjectID', id: <Buffer 5a f1 8f 4b c7 17 0e 76 9a c0 97 aa> },

Comme vous pouvez le voir, il y a un tampon là-dedans. Le moyen le plus simple de le convertir consiste simplement à faire <obj>.toString() ou String(<obj>._id)

Donc par exemple

var mongoose = require('mongoose')
mongoose.connect("http://localhost/test")
var personSchema = new mongoose.Schema({ name: String })
var Person = mongoose.model("Person", personSchema)
var guy = new Person({ name: "someguy" })
Person.find().then((people) =>{
  people.forEach(person => {
    console.log(typeof person._id) //outputs object
    typeof person._id == 'string'
      ? null
      : sale._id = String(sale._id)  // all _id s will be converted to strings
  })
}).catch(err=>{ console.log("errored") })
1
davejoem

J'ai rencontré le même problème et .toString () a fonctionné pour moi. J'utilise pilote mongojs . Voici ma question

Mongodb find ne fonctionne pas avec l'Objectid

1
Pritam Karmakar
function encodeToken(token){
    //token must be a string .
    token = typeof token == 'string' ? token : String(token)
}

User.findOne({name: 'elrrrrrrr'}, function(err, it) {
    encodeToken(it._id)
})

Dans mangouste, le objectId est un object (console.log (typeof it._id)).

1
elrrrrrrr

Accédez à la propriété dans l'ID d'objet comme ça user._id.$oid.

0
DanielKhan