• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

98
Views
MongoDB imprime solo un valor de una colección. JavaScript

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
over 3 years ago · Juan Pablo Isaza
2 answers
Answer question

0

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.

over 3 years ago · Juan Pablo Isaza Report

0

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); }
over 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error