Quiero obtener datos de mi base de datos para trabajar con variables.
Aquí está mi consulta de base de datos:
db.progress.find({username:socket},function(err,res){de qué obtengo información:
[ { _id: 61e180b54e0eea1454f8e5e6, username: 'user', exp: 0, fraction: 'undf'} ]si envío una solicitud
db.progress.find({username:socket},{exp:1},function(err,res){entonces a cambio obtendré
[ { _id: 61e180b54e0eea1454f8e5e6, exp: 0 } ]¿Cómo extraigo solo 0 de los datos recibidos? Me gustaría hacer algo como esto.
var findprogress = function(socket,cb){ db.progress.find({username:socket},function(err,res){ cb(res.exp,res.fraction) }) } findprogress(socket,function(cb){ console.log(cb.exp)//0 console.log(cb.fraction)//undf })pero no sé cómo implementarlo correctamente.
Recomiendo agregar en este caso para que pueda manipular más fácilmente sus datos proyectados. Por ejemplo:
db.progress.aggregate([ { $match: { username: socket } }, { $project: { _id: 0, exp: 1 } } ])De esta forma, le dice directamente a la consulta que no incluya el objectId, que normalmente se incluye de forma predeterminada.
Intenta darle 0 a _id:
db.progress.find({username:socket},{exp:1 , _id:0},function(err,res){find devuelve una matriz, por lo que deberá seleccionar el elemento de la matriz antes de acceder al campo:
var findprogress = function(socket,cb){ db.progress.find({username:socket},function(err,res){ cb(res[0].exp,res[0].fraction) }) }