2016-07-18 6 views
0

У меня есть коллекция MongodDB с ок. 3M документов. Однако я не могу экспортировать его в JSON, поскольку один или несколько документов имеют несовместимые с json поля. Это хорошо для MongodDB, поскольку документы хранятся как BSON, однако это не работает для моего использования.Mongodb DB - Найти документ с данными, не совместимыми с Json

Я не ожидал, что мои документы будут содержать данные, не совместимые с JSON. Как найти документы, не содержащие информацию JSON?

ответ

0

Вы можете запустить скрипт с:

Collection.forEach(function(item) { 
 
    try { 
 
    JSON.parse(item); 
 
    } 
 
    catch(err) { 
 
    db.NoJsonObject.save(item);} 
 
    } 
 
});

+0

Это хорошее начало, но не работает. Это приведет к тому, что все документы недействительны. – rat

+0

@rat Он перечисляет все из них как недопустимые, потому что 'ObjectId()' не сможет проанализировать. Если вы выполняете 'JSON.parse (JSON.stringify (item))', он, по крайней мере, устранит те, которые не работают из-за ObjectIds – cdbajorin

0

Вы могли бы искать для инструмента mongoexport.

Вы действительно хотите «исправить» свои данные или просто хотите представить данные так, как вы можете читать с помощью любого старого считывателя JSON?

Вы можете просто сделать один большой файл JSON в качестве выхода с помощью переключателя --jsonArray, но будьте очень осторожны. ваш читатель попытается прочитать все 3 миллиона документов, прежде чем он предоставит вам это внутреннее представление.

Без переключателя вы должны получить только один json-документ в строке, и вы можете сделать что-то подобное, чтобы уменьшить требуемую память.

while (read_line){ 
    load_json(line) 
    //do something with memory 
    free(json) 
} 

https://docs.mongodb.com/manual/reference/program/mongoexport/

mongoexport --db test --collection traffic --out traffic.json 

соответствующие флаги будут выводить файл в строгое представление JSON расходного ничего, что может импортировать JSON.

+0

'fix' - это плохой выбор слов. Это не сломано ... Так как BSON полностью поддерживает это. Но я не ожидал, что мои документы будут содержать данные не JSON, поэтому я хочу их найти и понять, что пошло не так. – rat

+0

@rat, вероятно, каждый документ имеет тип не-JSON в поле _id: ((ObjectId)). есть ли конкретная ошибка, которую вы видите во внешнем инструменте? –