Монго агрегирует $ slice до определенного значения вместо массива - PullRequest
0 голосов
/ 02 сентября 2018

В моей коллекции есть документ:

  {
    "_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 голосов
/ 02 сентября 2018

Ваша агрегация должна быть такой

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]
...