簡體   English   中英

MongoDB 獲取每個類別的最后更新的文檔集

[英]MongoDB get last updated set of documents of each category

我有這個文檔結構:

{
 ...,
insertionDate: 'someDate',
product: 'cool jacket',
color: 'red',
store: 'north store',
}

問題是這個系列存儲了產品曾經有過的每一個變化。 此刻,我有以下代碼來檢索一個商店中的所有產品,其中一種顏色是先前定義的一組顏色。

const colors = ['red', 'blue', 'orange'];    
collection.find({$and: [{store: store)}, {color: {$in: colors}}]});

問題是我獲得了所有的歷史數據,例如我可以在每種顏色中獲得 4 次“酷夾克”,因為它在數據庫中以不同的插入日期出現多次。

如何獲得每個產品的最后插入日期?

您可以使用collection.find({$and: [{store: store)}, {color: {$in: colors}}]}).sort(insertionDate: -1)將根據最后插入的日期對它們進行排序。

您可以使用具有三個管道的聚合查詢來實現此目的。

  1. $match以匹配所需的商店和 colors。

  2. 使用$sortinsertionDate desc 順序排序。

  3. $group按產品名稱或產品 ID 分組。 雖然對$first累加器進行分組將有助於獲取最近插入的產品。

這是一個經過測試的代碼:

await Collection.aggregate([
    {
      $match: {
        color: { $in: colors }
      }
    },
    { $sort: { insersionDate: -1 } },
    { $group: { _id: '$product', doc: { $first: '$$ROOT' } } }
  ]);

暫無
暫無

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

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