Mongodb 聚合:投影一个没有第一个元素的数组

问题描述 投票:0回答:3
{
    "_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' }])
mongodb aggregation-framework
3个回答
6
投票

试试这个吧

db.getCollection('cases').aggregate([
{ $project: { ServiceReferences: 1, SerRef: { $slice: [ "$ServiceReferences", 1, {$subtract: [ {$size:"$ServiceReferences"}, 1 ]} ] }} }
])

0
投票

您可以使用

$pop

删除数组的第一个元素

$pop 运算符删除数组的第一个或最后一个元素。向 $pop 传递值 -1 以删除数组中的第一个元素,向 $pop 传递值 1 以删除数组中的最后一个元素。

您可以将其应用到您的投影中。

这是文档: $pop 文档 mongoDb


0
投票

使用切片

https://www.mongodb.com/docs/manual/reference/operator/aggregation/slice/

以下语法从数组中的指定位置返回元素:

db.in_house_beta.aggregate([ 
     { $project: { "experience_combined": { $slice: [ "$experience_combined", 1 ] } } },
     { $unwind: "$experience_combined" },
     { $unwind: "$experience_combined.Company" },
     { $group:{ _id:{ Company:'$experience_combined.Company'}, count: { $sum:1} } 
}])
© www.soinside.com 2019 - 2024. All rights reserved.