从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 ] ]