我正在使用mongodb
处理mongoose
聚合,并且我怀疑我的应用程序在做什么错。
这是我的文件:
{
"_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 });
})
pageOptions:
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
吗?
感谢所有帮助
答案 0 :(得分:1)
在MongoDB中,您需要确保文档中的数据类型与查询中的数据类型匹配。在这种情况下,您有一个字符串存储在数据库中,并且您尝试使用 ObjectId 构建not null
阶段。要解决您可以在$match
上使用valueOf()
运算符的问题,请尝试:
pageOptions.category