我的收藏夹中有一个文档:
{
"_id" : ObjectId("5b8aaaebf57de10e080c9151"),
"user_email" : "temp@temp.com",
"platforms_budget" : [
{
"_id" : ObjectId("5b8aaaebf57de10e080c9154"),
"platform_id" : "f_01",
"platform_name" : "Facebook"
},
{
"_id" : ObjectId("5b8aaaebf57de10e080c9153"),
"platform_id" : "i_01",
"platform_name" : "Instagram"
},
{
"_id" : ObjectId("5b8aaaebf57de10e080c9152"),
"platform_id" : "f_02",
"platform_name" : "Facebook_Adds"
}
],
"__v" : 0
}
我想通过“ user_email”查找特定用户,并仅仅获取相关“ platform_budget”数组的长度。
我的功能是这样的:
var BudgetSchema = require('../models/Budget');
router.post('/temp', async function (req, res) {
var length = await BudgetSchema.aggregate(
[{ $match: { user_email: "test@test.com" } },
{ $project: { "count": { $size: '$platforms_budget' } } }])
console.log(length);
})
我得到的输出是:
[ { _id: 5b8aaaebf57de10e080c9151, count: 3 } ]
但是我只想将大小作为数字来获得,像这样:3。
我想要得到的输出是:
3
我知道我可以使用$slice运算符,但是我不知道如何正确使用它。有任何想法吗? 谢谢。
答案 0 :(得分:1)
您的汇总应该是这样
BudgetSchema.aggregate([
{ "$match": { "user_email": "test@test.com" } },
{ "$project": { "count": { "$size": "$platforms_budget" }}}
])
输出
[ { _id: "5b8aaaebf57de10e080c9151", count: 3 } ]
如果您希望将其作为数组值
const budget = (await BudgetSchema.aggregate([
{ "$match": { "user_email": "test@test.com" } },
{ "$project": { "count": { "$size": "$platforms_budget" }}}
])).map(({ count }) => count)
输出
[3]