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
我想你的意思是搜索两个字段 user
和 userId
。你应该使用这个:
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);
}
我在 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
我想你的意思是搜索两个字段 user
和 userId
。你应该使用这个:
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);
}