【发布时间】:2019-04-28 14:05:02
【问题描述】:
我正在使用 mongoose 处理 mongodb 聚合,我怀疑我在应用程序中做错了什么。
这是我的文件:
{
"_id": "5bf6fe505ca52c2088c39a45",
"loc": {
"type": "Point",
"coordinates": [
-43.......,
-19......
]
},
"name": "......",
"friendlyName": "....",
"responsibleName": "....",
"countryIdentification": "0000000000",
"categories": [
"5bf43af0f9b41a21e03ef1f9"
]
"created_at": "2018-11-22T19:06:56.912Z",
"__v": 0
}
在我的应用程序上下文中,我需要通过 GeoJSON 搜索文档,并使用 geoNear 执行此搜索。好的,它工作正常!但此外,我需要在文档中“匹配”或“过滤”特定的“类别”。我认为使用$match 是可能的,但我肯定做错了。代码如下:
CompanyModel.aggregate(
[
{
"$geoNear": {
"near": {
"type": "Point",
"coordinates": [pageOptions.loc.lng, pageOptions.loc.lat]
},
"distanceField": "distance",
"spherical": true,
"maxDistance": pageOptions.distance
}
},
{
"$match": {
categories: { "$in": [pageOptions.category] }
}
}
]
).then(data => {
resolve({ statusCode: 200, data: data });
}).catch(err => {
console.log(err);
reject({ statusCode: 500, error: "Error getting documents", err: err });
})
页面选项:
var pageOptions = {
loc: {
lat: parseFloat(req.query.lat),
lng: parseFloat(req.query.lng)
},
distance: parseInt(req.query.distance) || 10000,
category: req.params.category || ""
}
如果我删除$match,我会按位置获取所有文档,但我需要过滤特定类别...我不认为我需要手动过滤它,我相信它可以通过聚合函数实现。 ..
那么任何人都可以帮助我实现这个mongoose 吗?
感谢大家的帮助
【问题讨论】:
-
你能展示样品
pageOptions.category吗? -
是的。我现在就提出问题。
-
但我的意思是样本值是
5bf43af0f9b41a21e03ef1f9还是ObjectId("5bf43af0f9b41a21e03ef1f9")? -
对不起,我写错了问题。 Categories 是一个字符串数组。
-
@mickl 感谢您的帮助,该数组是 ObjectId 而不是 String。我太笨了……你能回答我标记为最佳答案的问题吗?