MongoDB 只打印一个集合的一个值。 JavaScript

MongoDB print only one value of a collection. JavaScript

我在 MongoDB console.logging 集合中只有一个数据时遇到问题。我已经搜索了无数关于此的主题,但其中 none 正是我想要的。 我想从我的猫鼬数据库中获取一个 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

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

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

如果您想使用投影,以便只有金额字段被 returned,然后提供第二个参数,其中包含您想要的字段 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(),第一个参数是 query/filter。因此,在您的代码中,您正在查询 _id = 0 的所有记录,我认为您不希望这样。第二个参数用于投影,您为此提供了一个无效对象,投影值应该像您的第一个参数一样仅为 1 或 0。第三个参数用于选项,在这里没有发挥作用。

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

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

.find() 方法将 return 一个 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);
}