Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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
$near$展开mongodb地理空间_Mongodb_Geolocation_Geospatial_Mongodb Java - Fatal编程技术网

$near$展开mongodb地理空间

$near$展开mongodb地理空间,mongodb,geolocation,geospatial,mongodb-java,Mongodb,Geolocation,Geospatial,Mongodb Java,我有一份教育机构文件,如下所示: public BasicDBList findByCoordinates(double latitude, double longitude){ BasicDBObject cmdBody = new BasicDBObject("aggregate", "EducationalInstitution"); List<BasicDBObject> pipeline = new ArrayList<BasicDBObject&

我有一份教育机构文件,如下所示:

public BasicDBList findByCoordinates(double latitude, double longitude){

    BasicDBObject cmdBody = new BasicDBObject("aggregate", "EducationalInstitution");

    List<BasicDBObject> pipeline = new ArrayList<BasicDBObject>();

    BasicDBObject projectParams = new BasicDBObject();
    projectParams.put("name", 1);
    projectParams.put("addresses.state", 1);
    projectParams.put("addresses.locs", 1);
    projectParams.put("courses", 1);

    BasicDBObject geoParams = new BasicDBObject();
    geoParams.put("$near", new double[] { latitude, longitude });
    geoParams.put("$maxDistance", 50/111.12);

    pipeline.add(new BasicDBObject("$project", projectParams));
    pipeline.add(new BasicDBObject("$unwind", "$addresses"));

    cmdBody.put("pipeline", pipeline);
    cmdBody.put("$addresses.locs", geoParams);

    return (BasicDBList) getDatastore().getDB().command(cmdBody).get("result");
}

{名称:…,地址:[{州:…,地点:[]},],课程:[…]}

locs是我的地理空间点所在的位置

要执行
$near
命令,我需要
$unwind
地址,因为我可以在许多地方拥有一个教育机构

我当前的方法如下所示:

public BasicDBList findByCoordinates(double latitude, double longitude){

    BasicDBObject cmdBody = new BasicDBObject("aggregate", "EducationalInstitution");

    List<BasicDBObject> pipeline = new ArrayList<BasicDBObject>();

    BasicDBObject projectParams = new BasicDBObject();
    projectParams.put("name", 1);
    projectParams.put("addresses.state", 1);
    projectParams.put("addresses.locs", 1);
    projectParams.put("courses", 1);

    BasicDBObject geoParams = new BasicDBObject();
    geoParams.put("$near", new double[] { latitude, longitude });
    geoParams.put("$maxDistance", 50/111.12);

    pipeline.add(new BasicDBObject("$project", projectParams));
    pipeline.add(new BasicDBObject("$unwind", "$addresses"));

    cmdBody.put("pipeline", pipeline);
    cmdBody.put("$addresses.locs", geoParams);

    return (BasicDBList) getDatastore().getDB().command(cmdBody).get("result");
}

然而,它会返回我想要的所有非故意地址,我只需要从某个点附近找到的地址

我找到了一个解决方案。首先,我尝试使用$match和$near,但是没有成功

然后我阅读了关于$geoNear聚合的内容,并尝试将put作为管道的最后一个参数,然而,根据MongoDB页面:“您只能将$geoNear用作管道的第一个阶段。”

我对我需要的$unwind有疑问,但是,我找到了一个参数,它可以帮助我进行数组定位

我的外壳代码:


db.教育机构.合计(
{$geoNear:{near:[-15.795758,-47.892312],maxDistance:50/111.12,distanceField:“addresses.calculated”,includeLocs:“addresses.locs”,niqueDocs:true},
{$project:{“name”:1,“addresses.state”:1,“addresses.locs”:1}}
);

我的Java代码:


公共基本列表查找坐标(双经度、双纬度){

BasicDBObject cmdBody=新的BasicDBObject(“聚合”、“教育机构”);
列表管道=新的ArrayList();
BasicDBObject geoNearParams=新的BasicDBObject();
geoNearParams.put(“近”,新的双[]{经度,纬度,});
geoNearParams.put(“最大距离”,50/111.12);
geoNearParams.put(“距离字段”,“地址.计算”);
geoNearParams.put(“includeLocs”、“addresses.locs”);
geoNearParams.put(“niqueDocs”,true);
BasicDBObject projectParams=新的BasicDBObject();
项目参数put(“名称”,1);
projectParams.put(“addresses.state”,1);
projectParams.put(“addresses.locs”,1);
项目参数put(“课程”,1);
添加(新的BasicDBObject(“$geoNear”,geoNearParams));
添加(新的BasicDBObject(“$project”,projectParams));
cmdBody.put(“管道”,管道);
如果(!getDatastore().getDB().command(cmdBody).ok()){
抛出新的MongoException(getDatastore().getDB().command(cmdBody.getErrorMessage());
}
return(BasicDBList)getDatastore().getDB().command(cmdBody.get(“结果”);
}

Thx

    BasicDBObject cmdBody = new BasicDBObject("aggregate", "EducationalInstitution");

    List<BasicDBObject> pipeline = new ArrayList<BasicDBObject>();

    BasicDBObject geoNearParams = new BasicDBObject();
    geoNearParams.put("near", new double[] {longitude, latitude,});
    geoNearParams.put("maxDistance", 50/111.12);
    geoNearParams.put("distanceField", "addresses.calculated");
    geoNearParams.put("includeLocs", "addresses.locs");
    geoNearParams.put("niqueDocs", true);

    BasicDBObject projectParams = new BasicDBObject();
    projectParams.put("name", 1);
    projectParams.put("addresses.state", 1);
    projectParams.put("addresses.locs", 1);
    projectParams.put("courses", 1);

    pipeline.add(new BasicDBObject("$geoNear", geoNearParams));
    pipeline.add(new BasicDBObject("$project", projectParams));

    cmdBody.put("pipeline", pipeline); 

    if( !getDatastore().getDB().command(cmdBody).ok() ){

        throw new MongoException(getDatastore().getDB().command(cmdBody).getErrorMessage());
    }

    return (BasicDBList) getDatastore().getDB().command(cmdBody).get("result");
}