繁体   English   中英

猫鼬查询返回按单个字段分组的文档的最新版本

[英]mongoose query to return most recent versions of documents grouped by single field

我有这些文件,

 { "_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排序。

您在这里误解了跳过和限制的用法。 尝试这个 :

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"
        }
    ]
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM