mongoDB聚合嵌套文档一次仅显示三个

问题描述

这是我的桌子:

    {
        "_id" : ObjectId("5f2e8e0d4976ed2c04fc2e90"),"reference" : "5f2e8e0d4976ed2c04fc2e8f","id" : "5e87187f6e8c15766e6994f8","name" : "no name","items" : [
                {
                        "_id" : ObjectId("5f2e994336caf138c13560fc"),"requestedItems" : "5e87187f6e8c15766e6994f8",},{
                        "_id" : ObjectId("5f2e994336caf138c135601c"),{
                        "_id" : ObjectId("5f2e994336caf138c135201c"),{
                        "_id" : ObjectId("5f2e994336caf138c139521c"),{
                        "_id" : ObjectId("5f2e994336caf138c139504f"),],"createdAt" : ISODate("2020-08-08T11:35:41.675Z"),"updatedAt" : ISODate("2020-08-18T13:34:43.077Z"),"date" : "8-8-2020","__v" : 0
}

我正在尝试查询“ ITEMS”中的最后三个子文档,我一直在尝试MongoDB聚合框架,但没有成功。这是我想出的。任何帮助将不胜感激。

    reqInventory.aggregate([
 {$match:{"id" : "5e87187f6e8c15766e6994f8"}},{ $addFields: {
    items: {
      $map: {
        input: '$items',as: 'new',in: {
          requestedItems : '$$new.requestedItems',name : '$$new.name',items: { $slice: [ '$$new.items',3 ] }
          
        }
      }
    }
  }}

解决方法

您可以直接在具有负计数的数组字段中使用$slice

reqInventory.aggregate([
  {
    $match: { "id": "5e87187f6e8c15766e6994f8" }
  },{
    $addFields: { items: { $slice: ["$items",-3] } }
  }
])

Playground

,

您可以使用{ $limit: <positive integer> }来限制您的回复。

这是给您更多解释的方式 https://docs.mongodb.com/manual/reference/operator/aggregation/limit/

,

您可以直接使用项目

reqInventory.aggregate([
      {
$match:{"id" : "5e87187f6e8c15766e6994f8"}
},{
            '$project': {
              'last3ITems': {
                '$slice': [
                  '$$ROOT.items',2,5
                ]
              }
            }
          }
        ]