簡體   English   中英

如何在 MongoDB 的聚合中獲取最后定義的值?

[英]How to get last defined value in an aggregration in MongoDB?

我有一個集合,其中的文檔有時包含status字段,有時不包含。 總是有一個data字段。 我正在嘗試形成一個查詢來獲取兩者的最新值,但是在使用$last運算符時,我從最新文檔中獲取值並導致status有時為null 如何獲取它以檢索最新定義的status值,同時仍保留最新文檔中的data值?

當前聚合:

  const project = await collection.aggregate([
    {
      $match: {
        projectId: id
      }
    },
    {
      $group: {
        _id: '$projectId',
        status: {
          $last: '$status'
        },
        data: {
          $last: '$data'
        }
      }
    }
  ]).toArray();

您可以使用$facet並在同一組文檔上並行執行多個查詢。

db.collection.aggregate([
  {
    $facet: {
      last_status: [
        {
          "$match": {
            status: {
              $ne: null
            }
          }
        },
        {
          "$sort": {
            _id: -1
          }
        },
        {
          "$limit": 1
        }
      ],
      last_data: [
        {
          "$match": {
            data: {
              $ne: null
            }
          }
        },
        {
          "$sort": {
            _id: -1
          }
        },
        {
          "$limit": 1
        }
      ]
    }
  },
  {
    "$project": {
      other_fields: {
        $first: "$last_data"
      },
      status: {
        $first: "$last_status.status"
      }
    }
  }
])

工作示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM