35

私はmongodb 2.2.0を使用しており、printjson()またはを使用した「きれいな」印刷とは対照的に、jsonを1行で印刷しようとしています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 docsprint(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 ハックを実行できます。

> 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

"sort" と "limit" を使用すると、結果をカスタマイズできます。mongoexport --type=csv を使用すると、結果をcsvファイルに出力でき、xlsまたは1行で読み取ることができます。

于 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 に答える