2016-12-14 82 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