{
"_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' }])
试试这个吧
db.getCollection('cases').aggregate([
{ $project: { ServiceReferences: 1, SerRef: { $slice: [ "$ServiceReferences", 1, {$subtract: [ {$size:"$ServiceReferences"}, 1 ]} ] }} }
])
您可以使用
$pop
删除数组的第一个元素
$pop 运算符删除数组的第一个或最后一个元素。向 $pop 传递值 -1 以删除数组中的第一个元素,向 $pop 传递值 1 以删除数组中的最后一个元素。
您可以将其应用到您的投影中。
这是文档: $pop 文档 mongoDb
使用切片
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} }
}])