Mongo将$ slice聚合为特定值,而不是数组

时间:2018-09-02 16:48:13

标签: javascript arrays mongodb mongoose slice

我的收藏夹中有一个文档:

  {
    "_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运算符,但是我不知道如何正确使用它。有任何想法吗? 谢谢。

1 个答案:

答案 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]