从mongo获取不同的坐标

这是我的Mongo模型:

Schema = new mongoose.Schema({ userId: {type: mongoose.Schema.Types.ObjectId, required: true, index: true, ref: 'user'}, date: {type: Number, index: true}, coords: {type: [Number], index: '2dsphere', required: true} //not distinct } 

我试图按以下格式按date检索不同的坐标:

 [[long, lat],[long, lat],[long, lat], ..., [long, lat]] 

我写了这样的东西:

 module.exports = function(req, res, next) { var days = req.params.days || 365; db.model('activity').aggregate([ {$match: {date: {$gte: getDatesFromNumDays(days)[0], $lte: getDatesFromNumDays(days)[1]}}}, {$group: { _id: '$coords' }}, ], function (err, result) { ... } 

不幸的是,我回报了什么

 [{"_id":[69.60151471655979,42.32299082108329]},{"_id":[-121.9339648456008,37.37375532540034]},{"_id":[-121.907453583667,37.36068282279872]...] 

我在这里错过了什么? 如何在输出中有数组的数组?

与所有返回MongoDB文档的查询forms一样,聚合框架必须坚持基本的“键/值”forms的结果。

唯一将返回单个字段结果数组的命令是.distinct()

 db.model('activity').distinct( 'coords', { "date": { "$gte": getDatesFromNumDays(days)[0], "$lte": getDatesFromNumDays(days)[1] }}, function(err,result) { // result is a array of the field values only } ); 

简单明了的例子:

 db.col.insert({ "a": [[1,2],[3,4]] }) db.col.insert({ "a": [[1,2],[5,6]] }) 

.distinct()输出:

 db.col.distinct("a") [ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ] ]