2016-09-25 5 views
0

Я пытаюсь создать документ, а затем поместить его в базу данных 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=[[email protected]}}

Я использую следующий код, чтобы распечатать его:

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

Я думаю, вы делаете это правильно. Причина, по которой печать не работает, не имеет ничего общего с mongodb.

Просто попробуйте следующее:

double [] cords = new double[]{32.05, 35.15}; 
    System.out.println(cords);//outputs [[email protected] 
    System.out.println(Arrays.toString(cords)); // outputs [32.05, 35.15] 

Считываемый способ печати массивов с использованием Arrays.toString(..). Это то, что происходит в вашем цикле for. Но перед вставкой он преобразуется в правый тип BSON.

Он также отлично подходит для использования в $near запросах.

+0

Благодарим за помощь. –

+0

Как я смогу достичь содержимого этого массива, если необходимо? Я попытался использовать 'loc.get (" position "). Get (" cords ") [0]', но его не работает. –

+0

Я попытался поместить документ в базу данных mongo, и я получил следующую ошибку: 'org.bson.codecs.configuration.CodecConfigurationException: Не удается найти кодек для класса [D.'. Эта проблема касается поля массива. Почему это происходит? –

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