Mongodb Mongoose聚合匹配返回空数组
我正在使用Mongodb Mongoose聚合匹配返回空数组,mongodb,mongoose,Mongodb,Mongoose,我正在使用mongoose处理mongodb聚合,我怀疑我在应用程序中犯了什么错误 这是我的文件: { "_id": "5bf6fe505ca52c2088c39a45", "loc": { "type": "Point", "coordinates": [ -43......., -19...... ] }, "name": "......", "friend
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
吗
感谢MongoDB中的所有帮助,您需要确保文档中的数据类型与查询中的类型匹配。在这种情况下,数据库中存储了一个字符串,您试图使用ObjectId构建
$match
阶段。要解决此问题,您可以在pageOptions.category
上使用valueOf()
运算符,请尝试:
{
"$match": {
categories: { "$in": [pageOptions.category.valueOf()] }
}
}
在MongoDB中,您需要确保文档中的数据类型与查询中的类型匹配。在这种情况下,数据库中存储了一个字符串,您试图使用ObjectId构建
$match
阶段。要解决此问题,您可以在pageOptions.category
上使用valueOf()
运算符,请尝试:
{
"$match": {
categories: { "$in": [pageOptions.category.valueOf()] }
}
}
您能给我看一下示例
页面选项。类别?是的。我现在就提出了这个问题。但我的意思是样本值,比如它是5BF43AF09B41A21E03EF1F9
还是ObjectId(“5BF43AF09B41A21E03EF1F9”)
?对不起,我写错了问题。Categories是一个字符串数组。@mickl谢谢您的帮助,数组是ObjectId而不是String。我好笨。。。你能回答这个问题,让我把它列为最佳答案吗?你能展示一下示例pageOptions.category
?是的。我现在就提出了这个问题。但我的意思是样本值,比如它是5BF43AF09B41A21E03EF1F9
还是ObjectId(“5BF43AF09B41A21E03EF1F9”)
?对不起,我写错了问题。Categories是一个字符串数组。@mickl谢谢您的帮助,数组是ObjectId而不是String。我好笨。。。你能回答这个问题,让我称之为最佳答案吗?