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 在另一个查询的结果中使用$GEOIN_Mongodb_Mongodb Query_Geospatial - Fatal编程技术网

Mongodb 在另一个查询的结果中使用$GEOIN

Mongodb 在另一个查询的结果中使用$GEOIN,mongodb,mongodb-query,geospatial,Mongodb,Mongodb Query,Geospatial,尝试使用Mongo DB的地理空间查询我的文档如下: 地点文件: { "_id": ObjectId("57062a9253e564e0d522f001"), "geofences": [ { "geofenceId": "geoFence1", "loc": { "type": "Polygon", "coordinates": [

尝试使用Mongo DB的地理空间查询我的文档如下: 地点文件:

{
    "_id": ObjectId("57062a9253e564e0d522f001"),
    "geofences": [
        {
            "geofenceId": "geoFence1",
            "loc": {
                "type": "Polygon",
                "coordinates": [
                    [
                        [
                            -11900093200000002,
                            33.53589500000004
                        ],
                        [
                            -118.96275899999999,
                            33.48520500000012
                        ],
                        [
                            -118.98051199999996,
                            33.42859300000009
                        ],
                        [
                            -119.05307099999987,
                            33.411024
                        ],
                        [
                            -119.094128,
                            33.426871999999946
                        ],
                        [
                            -119.10887899999999,
                            33.451151000000095
                        ],
                        [
                            -119.10721499999987,
                            33.50002300000011
                        ],
                        [
                            -119.11894899999999,
                            33.500022
                        ],
                        [
                            -119.10871799999988,
                            33.519264000000135
                        ],
                        [
                            -119.07014300000003,
                            33.536415999999974
                        ],
                        [
                            -119.00093200000002,
                            33.53589500000004
                        ]
                    ]
                ]
            }
        }
    ]
}
资产文件:

{
    "_id": ObjectId("536b150c30048054e3480789"),
    "loc": {
        "type": "Point",
        "coordinates": [
            -120.954436,
            37.625814000000005
        ]
    },
    "name": "kingize",
    "type": "priceless",
    "code": "pwd"
}
它们被正确插入,但当我尝试执行以下操作时:

var myloc = db.locations.find().next()
 db.assetlocation.find( { loc : { $geoWithin : { $geometry : myloc.geofences } } })
我得到:

error: {
    "waitedMS" : NumberLong(0),
    "ok" : 0,
    "errmsg" : "Point must only contain numeric elements",
    "code" : 2
}

我认为这个错误只会出现在insert语句上,但令我惊讶的是,它们工作得非常完美。

问题在于
“locations”
集合中包含的文档中的
“geofenses”
属性实际上是一个“数组”。因此,这种直接形式的数据不适合用于

为了向提供
“loc”
数据,您需要实际迭代
“geofenses”
的每个数组元素,并从每个元素传入数据:

var结果=[];
var cursor=db.locations.find();
//迭代光标
while(cursor.hasNext()){
var doc=cursor.next();
//迭代每个geofences元素
文件geofines.forEach(功能(围栏){
//对结果数组的查询
var assets=db.assetlocation.find({
“loc”:{
“$geoWitin”:{
“$geometry”:fence.loc
}
}
}).toArray();
//附加到总结果中
结果=结果。concat(资产);
});
}
//打印所有结果
printjson(结果);

因此,您需要“首先”获取每个结果文档中的每个数组元素,然后您可以使用包含的数据提供给查询
“assetlocation”
集合并收集获得的结果。

问题在于
“geofences”
属性包含在
位置中的文档中
集合实际上是一个“数组”。因此,这种直接形式的数据不适合用于

为了向提供
“loc”
数据,您需要实际迭代
“geofenses”
的每个数组元素,并从每个元素传入数据:

var结果=[];
var cursor=db.locations.find();
//迭代光标
while(cursor.hasNext()){
var doc=cursor.next();
//迭代每个geofences元素
文件geofines.forEach(功能(围栏){
//对结果数组的查询
var assets=db.assetlocation.find({
“loc”:{
“$geoWitin”:{
“$geometry”:fence.loc
}
}
}).toArray();
//附加到总结果中
结果=结果。concat(资产);
});
}
//打印所有结果
printjson(结果);

因此,您需要“首先”获取每个结果文档中的每个数组元素,然后您可以使用包含的数据提供给查询
“assetlocation”
集合,并收集获得的结果。

您向查询传递了错误的参数。不要传递
geofenses
对象,而是传递
geofenses[0].loc
字段,该字段包含实际坐标和几何体类型

由于
geofenches
是一个数组,因此可以通过循环获得单个几何体

请尝试以下代码段,它应该获取具有选定条件的文档

var myloc = db.locations.find().next()

var coor = myloc.geofences[0].loc;

db.assets.find( { loc : { $geoWithin : { $geometry : corr } } })

您向查询传递了错误的参数。不要传递
geofenses
对象,而是传递
geofenses[0].loc
字段,该字段包含实际坐标和几何体类型

由于
geofenches
是一个数组,因此可以通过循环获得单个几何体

请尝试以下代码段,它应该获取具有选定条件的文档

var myloc = db.locations.find().next()

var coor = myloc.geofences[0].loc;

db.assets.find( { loc : { $geoWithin : { $geometry : corr } } })