Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb-搜索子文档并返回已排序的结果_Mongodb_Sorting - Fatal编程技术网

mongodb-搜索子文档并返回已排序的结果

mongodb-搜索子文档并返回已排序的结果,mongodb,sorting,Mongodb,Sorting,请告诉我有一种方法可以查询数组中的多个字段(例如$elemMatch)并应用排序-如果我查询l中的多个字段,则会忽略该方法 文档未按ts:-1排序顺序返回-如果查询一个数组字段,则可以正常工作。 跳过和限制不会影响预期的排序 示例查询 db.transactions.find({ 'l.id': '5612087d70634d009dd919e5bb07fdad', 'l.t': 'organization' } ).sort({ ts: -1 }.skip(0).limit(10).toAr

请告诉我有一种方法可以查询数组中的多个字段(例如$elemMatch)并应用排序-如果我查询l中的多个字段,则会忽略该方法

文档未按ts:-1排序顺序返回-如果查询一个数组字段,则可以正常工作。 跳过和限制不会影响预期的排序

示例查询

db.transactions.find({ 'l.id': '5612087d70634d009dd919e5bb07fdad', 'l.t': 'organization'  } ).sort({ ts: -1 }.skip(0).limit(10).toArray()
db.transactions.find({ l: { $elemMatch: { id: '5612087d70634d009dd919e5bb07fdad', t: 'organization' }  } } ).sort({ ts: -1 }.skip(0).limit(10).toArray()
这个聚合有效,但我丢失了l的其余内容

db.transactions.aggregate({$unwind:"$l"},{$match:{"l.t":"organization", "l.id":"5612087d70634d009dd919e5bb07fdad"}}, {$sort:{"ts":-1}})
示例数据-忽略重复的ID,而不是此问题的一个因素

    [
    {
            "t" : "organization.save",
            "d" : {
                    "new" : false,
                    "id" : "5612087d70634d009dd919e5bb07fdad"
            },
            "ts" : ISODate("2013-08-20T02:21:39.955Z"),
            "l" : [
                    {
                            "t" : "organization",
                            "id" : "5612087d70634d009dd919e5bb07fdad"
                    },
                    {
                            "t" : "account",
                            "id" : "5612087d70634d009dd919e5bb07fdad"
                    }
            ],
            "_id" : "95c6cd5310aa485582312319f74775a4",
            "__v" : 0
    },
    {
            "t" : "organization.save",
            "d" : {
                    "new" : false,
                    "id" : "5612087d70634d009dd919e5bb07fdad"
            },
            "ts" : ISODate("2013-08-20T02:21:43.121Z"),
            "l" : [
                    {
                            "t" : "organization",
                            "id" : "5612087d70634d009dd919e5bb07fdad"
                    },
                    {
                            "t" : "account",
                            "id" : "5612087d70634d009dd919e5bb07fdad"
                    }
            ],
            "_id" : "d6434c3e9a1743afaa6c0961b5a69f70",
            "__v" : 0
    }
    ]
编辑:为了启动和运行,我创建了一个带有t+':'+id的复合字段。
这解决了我目前的排序问题,但由于数据重复,这并不理想。

您可能不需要
跳过
。聚合在响应大小上非常有限,不一定能很好地匹配所有查询。跳过并不重要-在本例中,我正在进行分页,只是从0开始。