Mongodb Aggregation: проектирование массива без первого элемента - PullRequest
0 голосов
/ 05 февраля 2020
{
    "_id" : ObjectId("5e3179e83708dc0dcfefaf"),

    "CaseNumber" : "T978045628",

    "ServiceReferences" : [ 

        ObjectId("5e317d48bc13eaf17712a786"),

        ObjectId("5e317f0ec08d57f4a88c3444"),

        ObjectId("5e317f0ec08d57f4a88c3234")

    ]

}

У меня есть коллекция с полями выше. Я хочу проецировать массив 'ServiceReferences', за исключением первого элемента, так как я хочу пропустить первый индексированный элемент массива. Пожалуйста, помогите мне. Я пробовал несколько вариантов использования, таких как:

db.getCollection('cases').aggregate([{
             "$project": {

                  "ServRefs": { $pop: { ServiceReferences: -1 } }
              }
       },
       {
        $lookup: {

            from: 'services',

            localField: 'ServRefs',

            foreignField: '_id',

            as: 'serviceDoc'

        }
    }, { $unwind: '$serviceDoc' }])

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Просто попробуйте с этим

db.getCollection('cases').aggregate([
{ $project: { ServiceReferences: 1, SerRef: { $slice: [ "$ServiceReferences", 1, {$subtract: [ {$size:"$ServiceReferences"}, 1 ]} ] }} }
])
0 голосов
/ 05 февраля 2020

Вы можете удалить первый элемент массива, используя $pop

Оператор $ pop удаляет первый или последний элемент массива. Передайте $ pop значение -1, чтобы удалить первый элемент массива, и 1, чтобы удалить последний элемент в массиве.

Вы можете применить его к своей проекции.

Вот документация: $ pop документация mongoDb

...