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?
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());
essayez ceci: objectId.str;
voir doc .
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é
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.
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
Le résultat renvoyé par find est un tableau.
Essayez plutôt ceci:
console.log (utilisateur [0] ["_ id"]);
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") })
J'ai rencontré le même problème et .toString () a fonctionné pour moi. J'utilise pilote mongojs . Voici ma question
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)).
Accédez à la propriété dans l'ID d'objet comme ça user._id.$oid
.