[英]Mongoose query - groupBy category and get last 4 items of each category
[英]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)
將根據最后插入的日期對它們進行排序。
您可以使用具有三個管道的聚合查詢來實現此目的。
$match
以匹配所需的商店和 colors。
使用$sort
按insertionDate
desc 順序排序。
$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.