2016-12-14 171 views
0

我有這些文件分組文件的最新版本,貓鼬查詢返回的單場

{ 
 
    "_id" : 1, 
 
    "fId" : "test", 
 
    "pId" : "test", 
 
    "url" : "A", 
 
    "subfolder" : "a" 
 
} 
 

 
, 
 
{ 
 
    "_id" : 3, 
 
    "fId" : "test", 
 
    "pId" : "test", 
 
    "url" : "A", 
 
    "subfolder" : "b" 
 
} 
 

 
, 
 
{ 
 
    "_id" : 5, 
 
    "fId" : "test", 
 
    "pId" : "test" 
 
    "url" : "A", 
 
    "subfolder" : "c" 
 
} 
 

 
, 
 
{ 
 
    "_id" : 2, 
 
    "fId" : "test", 
 
    "pId" : "test", 
 
    "url" : "B", 
 
    "subfolder" : "a" 
 
} 
 

 
, 
 
{ 
 
    "_id" : 4, 
 
    "fId" : "test", 
 
    "pId" : "test", 
 
    "url" : "B", 
 
    "subfolder" : "b" 
 
} 
 

 
, 
 
{ 
 
    "_id" : 7, 
 
    "fId" : "test", 
 
    "pId" : "test", 
 
    "url" : "A", 
 
    "subfolder" : "d" 
 
} 
 

 
, 
 
{ 
 
    "_id" : 8, 
 
    "fId" : "test", 
 
    "pId" : "test", 
 
    "url" : "B", 
 
    "subfolder" : "d" 
 
} 
 

 
, 
 
{ 
 
    "_id" : 9, 
 
    "fId" : "test", 
 
    "pId" : "test", 
 
    "url" : "A", 
 
    "subfolder" : "e" 
 
} 
 

 
, 
 
{ 
 
    "_id" : 10, 
 
    "fId" : "test", 
 
    "pId" : "test", 
 
    "url" : "B", 
 
    "subfolder" : "e" 
 
} 
 

 
, 
 
{ 
 
    "_id" : 6, 
 
    "fId" : "test", 
 
    "pId" : "test", 
 
    "url" : "B", 
 
    "subfolder" : "c" 
 
}

如何根據_id,按我寫貓鼬查詢到這些文檔進行排序子文件夾,並返回最近的5個組。

預期的結果是

group 1: 
 
[{ 
 
    "_id" : 10, 
 
    "fId" : "test", 
 
    "pId" : "test", 
 
    "url" : "B", 
 
    "subfolder" : "e" 
 
}, 
 
{ 
 
    "_id" : 9, 
 
    "fId" : "test", 
 
    "pId" : "test", 
 
    "url" : "A", 
 
    "subfolder" : "e" 
 
}] 
 
, 
 
group 2: 
 
[{ 
 
    "_id" : 8, 
 
    "fId" : "test", 
 
    "pId" : "test", 
 
    "url" : "B", 
 
    "subfolder" : "d" 
 
} 
 
, 
 
{ 
 
    "_id" : 7, 
 
    "fId" : "test", 
 
    "pId" : "test", 
 
    "url" : "A", 
 
    "subfolder" : "d" 
 
}] 
 
, 
 

 
group 3: 
 
[{ 
 
    "_id" : 6, 
 
    "fId" : "test", 
 
    "pId" : "test", 
 
    "url" : "B", 
 
    "subfolder" : "c" 
 
} 
 
, 
 
{ 
 
    "_id" : 5, 
 
    "fId" : "test", 
 
    "pId" : "test" 
 
    "url" : "A", 
 
    "subfolder" : "c" 
 
}] 
 
, 
 
group 4: 
 
[{ 
 
    "_id" : 4, 
 
    "fId" : "test", 
 
    "pId" : "test", 
 
    "url" : "B", 
 
    "subfolder" : "b" 
 
} 
 
, 
 
{ 
 
    "_id" : 3, 
 
    "fId" : "test", 
 
    "pId" : "test", 
 
    "url" : "A", 
 
    "subfolder" : "b" 
 
}] 
 
, 
 

 
group 5: 
 
[{ 
 
    "_id" : 2, 
 
    "fId" : "test", 
 
    "pId" : "test", 
 
    "url" : "B", 
 
    "subfolder" : "a" 
 
} 
 
, 
 
{ 
 
    "_id" : 1, 
 
    "fId" : "test", 
 
    "pId" : "test", 
 
    "url" : "A", 
 
    "subfolder" : "a" 
 
}]

我試着查詢

model.aggregate(
 
    [  
 
    {$match : {fId : "test" , pId : "test"}}, 
 
    {$group : {_id : "$subfolder", recording: { $push: "$$ROOT" } }},  
 
    {$skip : 5*(pageNumber-1)}, 
 
    {$sort : {"_id": -1}},  
 
    {$limit : 5 } 
 
    ] 
 
)

我看到一些隨機的5組,而不是最近的,並且結果也不按_id排序。

回答

1

您誤解了skip和limit的使用。試試這個:

與樣品文檔
model.aggregate(
    [  
    {$match : {fId : "test" , pId : "test"}}, 
    {$group : {_id : "$subfolder", recording: { $push: "$$ROOT" } }},  
    {$sort : {"recording._id": -1}}, 
    {$limit: 5} 
    ] 
) 

輸出提供:

 { 
    "_id" : "5", 
    "recording" : [ 
     { 
      "_id" : 9, 
      "fId" : "test", 
      "pId" : "test", 
      "url" : "A", 
      "subfolder" : "5" 
     }, 
     { 
      "_id" : 10, 
      "fId" : "test", 
      "pId" : "test", 
      "url" : "B", 
      "subfolder" : "5" 
     } 
    ] 
} 
{ 
    "_id" : "4", 
    "recording" : [ 
     { 
      "_id" : 7, 
      "fId" : "test", 
      "pId" : "test", 
      "url" : "A", 
      "subfolder" : "4" 
     }, 
     { 
      "_id" : 8, 
      "fId" : "test", 
      "pId" : "test", 
      "url" : "B", 
      "subfolder" : "4" 
     } 
    ] 
} 
{ 
    "_id" : "3", 
    "recording" : [ 
     { 
      "_id" : 5, 
      "fId" : "test", 
      "pId" : "test", 
      "url" : "A", 
      "subfolder" : "3" 
     }, 
     { 
      "_id" : 6, 
      "fId" : "test", 
      "pId" : "test", 
      "url" : "B", 
      "subfolder" : "3" 
     } 
    ] 
} 
{ 
    "_id" : "2", 
    "recording" : [ 
     { 
      "_id" : 3, 
      "fId" : "test", 
      "pId" : "test", 
      "url" : "A", 
      "subfolder" : "2" 
     }, 
     { 
      "_id" : 4, 
      "fId" : "test", 
      "pId" : "test", 
      "url" : "B", 
      "subfolder" : "2" 
     } 
    ] 
} 
{ 
    "_id" : "1", 
    "recording" : [ 
     { 
      "_id" : 1, 
      "fId" : "test", 
      "pId" : "test", 
      "url" : "A", 
      "subfolder" : "1" 
     }, 
     { 
      "_id" : 2, 
      "fId" : "test", 
      "pId" : "test", 
      "url" : "B", 
      "subfolder" : "1" 
     } 
    ] 
} 
+0

試過,但沒有任何反應。 – Sabreena

+0

@Sabreena它可以很好地處理您在問題中提供的數據...請參閱編輯 – felix

+0

它分組得很好,但我需要根據文檔的_id進行排序。這就是我需要最近兩個具有相同子文件夾的文檔(_id:10是最近的文檔) – Sabreena