在文档的字段中放置一个double []

时间:2016-09-25 19:04:41

标签: java mongodb document

我正在尝试创建一个文档,然后将其放在一个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运算符来定位文档的位置最接近其他位置?

任何帮助将不胜感激,谢谢。

2 个答案:

答案 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));