35

我正在使用 mongodb 2.2.0 并尝试在一行中打印 json,而不是使用printjson()or进行“漂亮”打印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

编辑:我希望输出如下:

> 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"
}
>

正如所有其他方法所给出的。同样,我需要使用游标对象。

4

6 回答 6

88
var cursor = db.collection.find().sort({_id:-1}).limit(10000);
while(cursor.hasNext()){
    printjsononeline(cursor.next());
}
于 2013-09-16T10:52:52.767 回答
5

尝试- 在MongoDB 文档print(tojson())中有一个使用光标进行打印的示例。

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

    if (myDocument) {
        var myItem = myDocument.item;
        print(tojson(myItem));
    }
于 2013-02-07T13:42:15.107 回答
3

你总是可以为此做一个 JS hack:

> 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"}

不漂亮但有效

于 2013-02-07T14:12:30.010 回答
2

使用“排序”和“限制”,可以自定义结果。使用 mongoexport --type=csv ,可以将结果打印到 csv 文件中,该文件可以在 xls 或一行中读取。

于 2016-06-17T09:26:13.873 回答
0

如果每个项目都有 {} 括号并且没有其他项目,则使用正则表达式将其拆分在括号上。

这会将其拆分为 {..} {..} 项。但是如果有嵌套的 {} 它将不起作用。

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
}
于 2013-02-07T14:47:46.307 回答
0

这是我从命令行使用的

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

不确定你可以 /sort /limit 它

于 2013-05-01T15:27:45.237 回答