Tengo un problema con la consola MongoDB. Registro solo un dato de una colección. Ya he buscado como infinitos temas sobre esto, pero ninguno hace exactamente lo que quiero. Quiero obtener datos de un número de mi base de datos de mangosta. (Estoy creando un bot discord.js) Así es como se ve la base de datos:
_id: 61bb8dc5a23c9a077066abf0 user: "soki#2400" userId: "466270219132731392" amount: 16 __v: 0
y quiero console.log()
el valor de la amount
.
Este es mi código ahora:
console.log(giftsSchema.find({"_id": 0},{"user": msg.author.tag},{"userId": msg.author.id}).amount);
Entonces, lo que quiero que imprima es:
16
pero se imprime
undefined
Creo que quiere buscar en dos campos user
y userId
. Deberías usar esto:
giftsSchema.findOne( {"user": msg.author.tag, "userId": msg.author.id}, // query function (err, user) { console.log(user.amount); });
Si desea usar la proyección para que solo se devuelva el campo de cantidad, proporcione un segundo parámetro con los campos que desea 1 y no desea 0.
giftsSchema.findOne( {"user": msg.author.tag, "userId": msg.author.id}, // query {_id: 0, amount: 1}, // projection function (err, user) { console.log(user.amount); });
En su ejemplo, está proporcionando 3 parámetros {"_id": 0}
, {"user": msg.author.tag}
y {"userId": msg.author.id}
. Con find() el primer parámetro es la consulta/filtro. Entonces, en su código, está consultando todos los registros donde _id
= 0 y no creo que quiera eso. El segundo parámetro es para proyección, y proporcionó un objeto no válido para eso, los valores de proyección solo deben ser 1 o 0 como su primer parámetro. El tercer parámetro es para opciones y no entra en juego aquí.
Desea consultar varios campos al tenerlos en un solo objeto como este { field1 : value1, field2 : value2 }
. También creo que solo desea un resultado, por lo que debe usar findOne() en su lugar para que solo obtenga un único objeto a cambio y no una matriz de objetos.
Además, Mongoose es asíncrono. Por lo tanto, debe hacer una función async
y await
el resultado. O puede proporcionar una función de devolución de llamada como se muestra en mi ejemplo. NOTA: No manejo el caso de err
en mi ejemplo.
El método .find()
devolverá una Promesa. Primero debe esperar a que se resuelva esa Promesa antes de registrar el resultado. Intenta hacerlo de esta manera:
const someFunction = async () => { let result = await giftsSchema.find({ "user": msg.author.tag, "userId": msg.author.id }, { _id: 0, amount: 1 }); console.log('Result: ', result.amount); }