【发布时间】:2015-10-25 09:19:47
【问题描述】:
我有以下数据库:
db.ItemVo.find()
{ "_id" : ObjectId("55bf2b465ef98ff39dba049c"), "loc" : { "type" : “点”,“坐标”:[-4.427237, 36.733284] },“标题”: “item1”、“summary”:“摘要 item1”、“itemType”:“TXT”} {“_id”: ObjectId(“55bf2ddc5ef98ff39dba049d”),“loc”:{“type”:“Point”, “坐标”:[-3.427237, 35.733284] },“标题”:“item2”, "summary" : "总结 item2", "itemType" : "TXT" }
按 $near 查找:
db.ItemVo.find({loc:{"$near":{ "$geometry": {type: "Point", 坐标:[-4.427, 36.73]},“$maxDistance”:20000}}})
{ "_id" : ObjectId("55bf2b465ef98ff39dba049c"), "loc" : { "type" : “点”,“坐标”:[-4.427237, 36.733284] },“标题”: "item1", "summary" : "摘要 item1", "itemType" : "TXT" }
在 Morphia DAO 中:
public List<ItemVo> findByNear (){
LOGGER.info("[ItemDAO - findByNear] - init");
List<ItemVo> str = getDs().find(ItemVo.class).field("loc").near(-4.427, 36.73, 2000/111.12, true).asList();
return str;
}
Morphia 返回集合的所有元素,而不是通过 $near 找到的。 Morphia 应该只返回元素“item1”而不是“item2”。问题出在哪里?
我的对象:
@Entity
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
Public class ItemVo implements Serializable{
private static final long serialVersionUID = 1258690003100456384L;
@Id private String id;
@Embedded
private LocationVo loc;
private String title;
private String summary;
........
@Embedded
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class LocationVo implements Serializable{
private static final long serialVersionUID = -5282690346503247312L;
private String type; //POINT, etc
private double[] coordinates;
谢谢。
【问题讨论】:
标签: java mongodb geospatial morphia