【发布时间】:2023-03-21 06:54:02
【问题描述】:
我一直在网上搜索与此相关的内容,但找不到。
我有这个聚合
Place.aggregate(
[
{ "$geoNear": {
"near": {
"type": "Point",
"coordinates": [longitude, latitude]
},
"spherical": true,
"distanceField": "distance"
}},
{ $group:
{ _id: "$_id",
name: { '$first': '$name' },
distance: { $first: "$distance" }
}
},
{ $project : {
name: 1,
distance: 1,
}}
],
function(error, places) {
if (error) return callback(error, null);
callback(null, places)
}
);
它可以工作,但是 geoNear 排序丢失了!
但这给了我正确排序的文档:
Place.aggregate(
[
{ "$geoNear": {
"near": {
"type": "Point",
"coordinates": [longitude, latitude]
},
"spherical": true,
"distanceField": "distance"
}}
],
function(error, places) {
if (error) return callback(error, null);
callback(null, places)
}
);
有什么想法吗?
为了让您了解我在这里尝试做什么是我使用的完整查询
Place.aggregate(
[
{ "$geoNear": {
"near": {
"type": "Point",
"coordinates": [longitude, latitude]
},
"spherical": true,
"distanceField": "distance"
}},
{"$unwind": "$participants" } ,
{ $group:
{ _id: "$_id",
name: { '$first': '$name' },
distance: { $first: "$distance" },
person: { $sum: 1 },
sumof:{ $sum: "$participants.age"}
}
},
{ $project : {
name: name,
distance: 1,
person: 1,
meanAge:{ $divide: [ "$sumof", "$person" ]}
}}
],
function(error, places) {
if (error) return callback(error, null);
callback(null, places)
}
);
【问题讨论】:
-
您正在对主键“_id”进行分组,这实际上并没有做任何事情。为什么要这么做?您还想在这里做什么?
-
我显示的代码被简化了,我的目标是获取具有按 geoNear 排序的自定义字段(使用组和项目)的文档。
-
我编辑了我的问题,应该更清楚我现在想要做什么。
标签: javascript mongodb mongoose aggregation-framework