Подтвердить что ты не робот

Mongodb print json без пробелов, т.е. нечетко json

Я использую mongodb 2.2.0 и пытаюсь напечатать json в одной строке, в отличие от "симпатичной" печати, используя printjson() или find().pretty(). то есть мне нужны документы, перечисленные в формате json, как это сделано, просто выполнив команду db.collection.find().limit(10), но мне нужно сделать это с помощью курсора в файле javascript следующим образом:

var cursor = db.collection.find().sort({_id:-1}).limit(10000);
while(cursor.hasNext()){
    //printNonPrettyJson(cursor.next()); //How???!
}

print() не выполняет задания, он просто печатает какую-то бред о идентификаторе объекта.

Причина, по которой я хочу это, заключается в том, что я вызываю файл javascript с консоли и затем передаю вывод в файл следующим образом:

mongo mydatabase myjsfile.js >> /tmp/myoutput.txt

EDIT: я хочу, чтобы результат был следующим:

> db.zips.find().limit(2)
{ "city" : "ACMAR", "loc" : [ -86.51557, 33.584132 ], "pop" : 6055, "state" : "A
L", "_id" : "35004" }
{ "city" : "ADAMSVILLE", "loc" : [ -86.959727, 33.588437 ], "pop" : 10616, "stat
e" : "AL", "_id" : "35005" }
>

и не нравится:

> db.zips.find().limit(2).pretty()
{
        "city" : "ACMAR",
        "loc" : [
                -86.51557,
                33.584132
        ],
        "pop" : 6055,
        "state" : "AL",
        "_id" : "35004"
}
{
        "city" : "ADAMSVILLE",
        "loc" : [
                -86.959727,
                33.588437
        ],
        "pop" : 10616,
        "state" : "AL",
        "_id" : "35005"
}
>

как и все остальные методы. Опять же, мне нужно это с помощью объекта курсора.

4b9b3361

Ответ 1

var cursor = db.collection.find().sort({_id:-1}).limit(10000);
while(cursor.hasNext()){
    printjsononeline(cursor.next());
}

Ответ 2

Попробуйте print(tojson()) - там пример печати с помощью курсора в Документах MongoDB.

    var myCursor = db.inventory.find( { type: 'food' } );
    var myDocument = myCursor.hasNext() ? myCursor.next() : null;

    if (myDocument) {
        var myItem = myDocument.item;
        print(tojson(myItem));
    }

Ответ 3

С "сортировкой" и "пределом" результаты могут быть настроены. с mongoexport --type = csv, результат может быть распечатан в файл csv, который можно прочитать в xls или в одной строке.

Ответ 4

Вы всегда можете сделать JS-хак для этого:

> db.tg.find().forEach(function(doc){ print(tojson(doc).replace(/(\r\n|\n|\r|\s)/gm, '')); })
{"_id":ObjectId("511223348a88785127a0d13f"),"a":1,"b":1,"name":"xxxxx0"}

Не очень, но работает

Ответ 5

если каждый элемент имеет {} скобки, а других нет, тогда разделите его на скобки, используя регулярное выражение.

Это разделило бы его на {..} {..} элементы. Но если есть вложенные {}, это не сработает.

var res = s.match(/\{(.|\s)*?\}/g);
if(res) for(var x=0;x<res.length;x++){
    // print  res[x].replace(/\s+/g," ");// w/o spaces
}

Ответ 6

Вот что я использую из командной строки

mongoexport -d $dbname -c $collection -q '{ "id" : -1 }'

Не уверен, что вы можете/сортировать/ограничивать его