【问题标题】:MongoDB print only one value of a collection. JavaScriptMongoDB 只打印一个集合的一个值。 JavaScript
【发布时间】:2022-01-20 03:39:30
【问题描述】:

我在使用 MongoDB 控制台时遇到问题。仅记录集合的一个数据。我已经搜索过无数关于这个的话题,但没有一个能完全符合我的要求。 我想从我的 mongoose 数据库中获取一个 number 数据。 (我正在创建一个 discord.js 机器人) 这是数据库的样子:

_id: 61bb8dc5a23c9a077066abf0
user: "soki#2400"
userId: "466270219132731392"
amount: 16
__v: 0

我想console.log()amount的值。

这是我现在的代码:

console.log(giftsSchema.find({"_id": 0},{"user": msg.author.tag},{"userId": msg.author.id}).amount);

所以我想要打印的是:

16

但它会打印出来

undefined

【问题讨论】:

    标签: javascript mongodb mongoose discord.js mongoose-schema


    【解决方案1】:

    我认为您的意思是搜索两个字段 useruserId。你应该使用这个:

    giftsSchema.findOne(
        {"user": msg.author.tag, "userId": msg.author.id}, // query
        function (err, user) { 
           console.log(user.amount); 
        });
    

    如果您想使用投影以便只返回金额字段,请提供第二个参数,其中包含您想要 1 和不想要 0 的字段。

    giftsSchema.findOne(
        {"user": msg.author.tag, "userId": msg.author.id}, // query
        {_id: 0, amount: 1}, // projection
        function (err, user) { 
            console.log(user.amount);
        });
    

    在您的示例中,您提供了 3 个参数 {"_id": 0}{"user": msg.author.tag}{"userId": msg.author.id}。对于find(),第一个参数是查询/过滤器。因此,在您的代码中,您正在查询 _id = 0 的所有记录,我认为您不希望这样做。第二个参数用于投影,您为此提供了一个无效对象,投影值应该像您的第一个参数一样仅为 1 或 0。第三个参数用于选项,在这里不发挥作用。

    您希望通过将多个字段放在单个对象中来查询多个字段,例如 { field1 : value1, field2 : value2 }。我也认为你只想要一个结果,所以你应该改用findOne(),这样你只会得到一个对象而不是一个对象数组。

    另外,Mongoose 是异步的。所以你应该为结果创建一个async 函数和await。或者您可以提供一个回调函数,如我的示例所示。注意:在我的示例中,我不处理 err 案例。

    【讨论】:

      【解决方案2】:

      .find() 方法将返回一个 Promise。在记录结果之前,您应该首先等待解决该 Promise。尝试这样做:

      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);
      }
      

      【讨论】:

        猜你喜欢
        • 2015-08-10
        • 2011-07-18
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 2016-05-29
        • 1970-01-01
        相关资源
        最近更新 更多