Идентификатор объекта nodejs mongodb в строку
IN nodejs, с mongodb, mongoosejs как orm
Я делаю это
У меня есть модель, User
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.
})
Почему? И как получить _id для строки тогда?
Ответы
Ответ 1
Попробуйте следующее:
user._id.toString()
A MongoDB ObjectId - это 12-байтовый UUID, который может использоваться как строковое представление HEX с длиной 24 символа. Вам нужно преобразовать его в строку, чтобы показать его в console
, используя console.log
.
Итак, вы должны это сделать:
console.log(user._id.toString());
Ответ 2
выньте подчеркивание и попробуйте снова:
console.log(user.id)
Кроме того, значение, возвращаемое из id, уже является строкой, как вы можете видеть здесь.
Я использую это таким образом, и это работает.
ура
Ответ 3
Я использую mongojs, и у меня есть этот пример:
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.
}
})
Я надеюсь, что эта помощь.
Ответ 4
попробуйте это: objectId.str;
смотри док.
Ответ 5
Если вы используете Mongoose, единственный способ убедиться, что идентификатор как шестнадцатеричная строка выглядит следующим образом:
object._id ? object._id.toHexString():object.toHexString();
Это связано с тем, что object._id существует только в том случае, если объект заселен, если не объект ObjectId
Ответ 6
Результат, возвращаемый find, представляет собой массив.
Попробуйте это вместо:
console.log(пользователь [0] [ "_ ID" ]);
Ответ 7
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)
})
В мангусте objectId является объектом (console.log(typeof it._id)).
Ответ 8
Я столкнулся с той же проблемой, и .toString() работал для меня. Я использую драйвер Mongojs. Вот мой вопрос
Mongodb найти не работает с Objectid
Ответ 9
При использовании мангуста.
Представление _id обычно находится в форме (получено на стороне клиента)
{ _id: { _bsontype: 'ObjectID', id: <Buffer 5a f1 8f 4b c7 17 0e 76 9a c0 97 aa> },
Как вы можете видеть там буфер там. Самый простой способ преобразовать это просто сделать <obj>.toString()
или String(<obj>._id)
Так например
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") })
Ответ 10
Доступ к свойству внутри идентификатора объекта user._id.$oid
.
Ответ 11
Здесь решение, которое не требует использования сторонних библиотек. Вы можете использовать метод valueOf
в классе ObjectId
:
const obj = db.col.findOne(...) // Get document from MongoDB
const id = obj._id // _id field of an object, e.g. ObjectId("5cc1c2ba7338312497f32a41")
const strId = id.valueOf() // String value of an id, e.g. 5cc1c2ba7338312497f32a41"
Больше информации здесь.