7

コレクションで実行する集計を mongo シェルでコーディングしました。シェルに直接貼り付けると、1 行ずつ貼り付ける必要があり、面倒で時間がかかります。特に、うまくいかず、最初からやり直す必要がある場合はなおさらです。したがって、私はそれを .js ドキュメントに入れてこのようにロードしましたが、コードが有効な場合にload("myaggregation.js")のみ返されます。trueロード後に集計を実行するにはどうすればよいですか? これに関するドキュメントが見つかりません。nodejs ドライバーを使用する必要がありますか?

4

4 に答える 4

10

集計コードを関数に入れます。

function my_aggregate() { 
    return db.foo.aggregate( [ ... ] );
}

それを.jsファイルに保存します。

次に、実行loadしてロードします。コマンドライン フラグを使用してコマンドラインでファイル名を渡すこともできます。--shellこれにより、指定したファイルを実行した後に対話型シェルが開始され.jsます。

ファイルが実行されると、新しい関数を実行できるようになります。入力するだけ

my_aggregate()

更新return私が言及しなかった明示的なものを使用する必要があります。したがって、あなたの場合、次のようなものが必要になります。

function my_aggregate() {
    return db.zips.aggregate([{ $match: { state: { $in: [ "CA", "NY" ] } }},{ $group:{ _id : {  "state" : "$state","city" : "$city" }, pop : { $sum: "$pop"}}},{ $match: {  pop: { $gt: 25000 } }},{$group:{ _id : {   "city" : "$city"}, pop : { $avg: "$pop"}}}]);
}
于 2013-09-15T05:05:23.163 に答える
2

これが遅い答えであることは知っていますが、これを処理する良い方法を見つけました:

集計クエリを含む js ファイルを作成します。

use blog; 

db.posts.aggregate([  
    ... my query ... 
]);

次に、ファイルを mongo クライアントに単純に cat してパイプすることができます。

cat myfile.js | mongo
于 2014-07-23T06:52:26.367 に答える
1

script.js ファイルの内容:

aggrQuery = db.foo.aggregate([

    {$group: {_id: '$bar', pop: {$max: '$buz'}}}
])

モンゴシェルで:

> load('/file/location/script.js');
true
>aggrQuery
here will be output
于 2014-11-18T05:15:22.207 に答える