我正在尝试创建一个文档,然后将其放在一个mongo数据库中。
创建文档时,其中一个字段的类型为double[]
。
我使用下一行代码将此字段添加到文档中:
Document loc = new Document();
loc.put("position", new Document("type", "Point").append("cords", new double[]{32.05, 35.15}));
当我尝试打印出position
字段的内容时,我得到下一个输出:
position = Document{{type=Point, cords=[D@d455b8}}
我使用下一个代码将其打印出来:
private void printout(Document d){
Set<Entry<String, Object>> ks = d.entrySet();
for (Entry e : ks){
System.out.println(e.getKey() + " = " + e.getValue());
}
System.out.println("");
}
问题是为什么我打印出文档密钥和值时没有看到实际的数字?
另一个问题是,如果我以这种方式存储文档,我是否可以使用$near
运算符来定位文档的位置最接近其他位置?
任何帮助将不胜感激,谢谢。
答案 0 :(得分:0)
我认为你做得对。打印不起作用的原因与mongodb无关。
试试以下内容:
double [] cords = new double[]{32.05, 35.15};
System.out.println(cords);//outputs [D@311d617d
System.out.println(Arrays.toString(cords)); // outputs [32.05, 35.15]
打印阵列的可读方式是使用Arrays.toString(..)
。这就是你的for循环中发生的事情。但是在插入之前它会被转换为正确的BSON类型。
在$near
查询中使用它看起来也很好。
答案 1 :(得分:0)
问题解决了。 显然,应该使用列表来将数组插入到mongoDB文档中。
List<Double> cordlist = new ArrayList<Double>();
cordlist.add(32.05);
cordlist.add(35.15);
loc.put("position", new Document("type", "Point").append("cords", cordlist));