我正在使用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
编辑:我想要输出如下:
> 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"
}
>
由所有其他方法给出。同样,我需要使用游标对象。
答案 0 :(得分:66)
var cursor = db.collection.find().sort({_id:-1}).limit(10000);
while(cursor.hasNext()){
printjsononeline(cursor.next());
}
答案 1 :(得分:3)
尝试print(tojson())
- 有一个使用MongoDB docs中的光标进行打印的示例。
var myCursor = db.inventory.find( { type: 'food' } );
var myDocument = myCursor.hasNext() ? myCursor.next() : null;
if (myDocument) {
var myItem = myDocument.item;
print(tojson(myItem));
}
答案 2 :(得分:2)
使用“排序”和“限制”,可以自定义结果。 使用mongoexport --type = csv,结果可以打印到csv文件中,可以用xls或一行读取。
答案 3 :(得分:1)
你总是可以为此做一个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"}
不漂亮,但有效
答案 4 :(得分: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
}
答案 5 :(得分:0)
以下是我在命令行中使用的内容
mongoexport -d $dbname -c $collection -q '{ "id" : -1 }'
不确定是否可以/排序/限制