Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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 Java地理空间查询where子句_Java_Mongodb_Command_Geospatial - Fatal编程技术网

MongoDB Java地理空间查询where子句

MongoDB Java地理空间查询where子句,java,mongodb,command,geospatial,Java,Mongodb,Command,Geospatial,我使用mongodb java驱动程序中的地理空间查询,使用以下代码获取给定位置周围的位置: BasicDBObject myCmd = new BasicDBObject(); myCmd.append("geoNear", collectionName); double[] loc = {5,5}; myCmd.append("near", loc); myCmd.append("spherical", true); myCmd.append("distanceMultiplie

我使用mongodb java驱动程序中的地理空间查询,使用以下代码获取给定位置周围的位置:

BasicDBObject myCmd = new BasicDBObject(); 

myCmd.append("geoNear", collectionName); 
double[] loc = {5,5}; 
myCmd.append("near", loc); 
myCmd.append("spherical", true); 
myCmd.append("distanceMultiplier", 6378000);
myCmd.append("maxDistance", 200); 

BasicDBList results = (BasicDBList)myResults.get("results");
for( Iterator< Object > it = results.iterator(); it.hasNext(); )
{
    BasicDBObject result  = (BasicDBObject) it.next();
    BasicDBObject dbo = (BasicDBObject) result.get("obj");
    System.out.println(dbo.getString("name"));
}
BasicDBObject myCmd=new BasicDBObject();
myCmd.append(“geoNear”,collectionName);
双[]loc={5,5};
myCmd.追加(“近”,loc);
myCmd.append(“球形”,true);
myCmd.append(“距离乘数”,6378000);
myCmd.append(“maxDistance”,200);
BasicDBList结果=(BasicDBList)myResults.get(“结果”);
for(Iteratorit=results.Iterator();it.hasNext();)
{
BasicDBObject结果=(BasicDBObject)it.next();
BasicDBObject dbo=(BasicDBObject)result.get(“obj”);
System.out.println(dbo.getString(“name”);
}

到目前为止,这一切都很好。我遇到的麻烦是增加了额外的选择标准。i、 e.我的集合有一个名为category的字段,我想将该类别添加到查询中。e、 g.告诉我属于给定类别的所有位置

期待您的回答和提示

溴 Martin

要将地理空间查询限制在某些其他属性上,请将文档添加为查询参数

BasicDBObject myCmd = new BasicDBObject(); 
BasicDBObject myQuery = new BasicDBObject();    

myCmd.append("geoNear", collectionName); 
double[] loc = {5,5}; 
myCmd.append("near", loc); 
myCmd.append("spherical", true); 
myCmd.append("distanceMultiplier", 6378000);
myCmd.append("maxDistance", 200); 

//construct a query document from another BasicDBOject
myQuery.append("category":"some category");
//add this as a query document
myCmd.append("query", myQuery);

BasicDBList results = (BasicDBList)myResults.get("results");
for( Iterator< Object > it = results.iterator(); it.hasNext(); )
{
    BasicDBObject result  = (BasicDBObject) it.next();
    BasicDBObject dbo = (BasicDBObject) result.get("obj");
    System.out.println(dbo.getString("name"));
}
BasicDBObject myCmd=new BasicDBObject();
BasicDBObject myQuery=新建BasicDBObject();
myCmd.append(“geoNear”,collectionName);
双[]loc={5,5};
myCmd.追加(“近”,loc);
myCmd.append(“球形”,true);
myCmd.append(“距离乘数”,6378000);
myCmd.append(“maxDistance”,200);
//从另一个基本对象构造查询文档
append(“category”:“some category”);
//将其添加为查询文档
myCmd.append(“查询”,myQuery);
BasicDBList结果=(BasicDBList)myResults.get(“结果”);
for(Iteratorit=results.Iterator();it.hasNext();)
{
BasicDBObject结果=(BasicDBObject)it.next();
BasicDBObject dbo=(BasicDBObject)result.get(“obj”);
System.out.println(dbo.getString(“name”);
}

您尝试了myCmd.append(“query”,categoryDocument),其中categoryDocument是表示您的查询的文档,我认为您必须将其构造为另一个DBObject。我不使用Java驱动程序,因此无法测试。但是额外的过滤肯定是通过查询字段完成的,并将文档作为参数。嗨,john,这解决了我的问题!!谢谢!br Martin请添加您的解决方案作为其他用户的答案。@Martin,我已经添加了解决方案,以防其他人有此问题。如果它对您有帮助并且是正确的,请随意编辑和/或接受它。