Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Mongoose聚合匹配返回空数组_Mongodb_Mongoose - Fatal编程技术网

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。我好笨。。。你能回答这个问题,让我称之为最佳答案吗?