node.js - new - mongodb objectid to string
nodejs mongodb object id to string (10)
IN nodejs, con mongodb, mongoosejs como orm
yo estoy haciendo esto
Tengo un modelo, usuario
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.
})
¿Por qué? ¿Y cómo llevar el _id a la cadena?
Acceda a la propiedad dentro de la id del objeto como ese user._id.$oid
.
Cuando se usa mangosta.
Una representación del _id generalmente está en la forma (lado del cliente recibido)
{ _id: { _bsontype: ''ObjectID'', id: <Buffer 5a f1 8f 4b c7 17 0e 76 9a c0 97 aa> },
Como pueden ver, hay un buffer ahí. La forma más sencilla de convertirlo es haciendo <obj>.toString()
o String(<obj>._id)
Así por ejemplo
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") })
El resultado devuelto por find es una matriz.
Pruebe esto en su lugar:
console.log (usuario [0] ["_ id"]);
Enfrenté el mismo problema y .toString () funcionó para mí. Estoy usando el controlador de mongojs https://github.com/mafintosh/mongojs . Aquí estaba mi pregunta
Estoy usando mongojs, y tengo este ejemplo:
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.
}
})
Espero esta ayuda.
Prueba esto:
user._id.toString()
Un ObjectId MongoDB es un UUID de 12 bytes que se puede utilizar como una representación de cadena HEX con 24 caracteres de longitud. Necesita convertirlo a una cadena para mostrarlo en la console
usando console.log
.
Entonces, tienes que hacer esto:
console.log(user._id.toString());
Si usa Mongoose, la única forma de asegurarse de tener el ID como un hexágono de cadena parece ser:
object._id ? object._id.toHexString():object.toHexString();
Esto se debe a que object._id existe solo si el objeto está lleno, si no el objeto es un ObjectId
intente esto: objectId.str;
ver doc: http://docs.mongodb.org/manual/reference/object-id/
saca el guión bajo y vuelve a intentarlo:
console.log(user.id)
Además, el valor devuelto por id ya es una cadena, como se puede ver aquí https://github.com/LearnBoost/mongoose/issues/548#issuecomment-2245903 .
Lo estoy usando de esta manera y funciona.
Aclamaciones
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)
})
En mangosta, el objectId es un objeto (console.log (typeof it._id)).