Подтвердить что ты не робот

Идентификатор объекта 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 для строки тогда?

4b9b3361

Ответ 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)).

Ответ 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"

Больше информации здесь.