問題タブ [aggregation-framework]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
3207 参照

mongodb - MongoDB Aggregation Framework を使用したカスタム パイプライン オペレーター

実際、私はいくつかの計算を行うために map reduce を使用しています。計算に使用できるパイプライン演算子がないため、集計フレームワークではそれを行うことができません。

カスタム パイプライン オペレータを作成することは可能ですか?

前もって感謝します

0 投票する
2 に答える
3243 参照

java - Mongodb集計フレームワークにフロア機能はありますか?

私はmongodbで整数計算をしようとしましたが、いくつか問題があります。mongo db 集計フレームワークで doubles を切り上げる方法はありますか?

0 投票する
2 に答える
204 参照

mongodb - コレクションから $first ドキュメントを抽出しようとしています

集約フレームワークを介してさまざまなドキュメントをパイプした後、最終的に結果のドキュメントが得られます。

今の問題は、$first と $last のドキュメントだけが欲しいということです。

最終的なドキュメントは次のようになります (膨大なリスト)。

ドキュメントの作成に使用した mongo シェル コマンドは次のとおりです。
db.talks.aggregate([{$project: {_id: 0, comments: "$comments"}}, {$unwind: "$comments"}, {$group: {_id: "$comments.author", count: {$sum: 1}}}, {$sort: {count: -1}}])

しかし、最初と最後のドキュメントだけが必要なので、次のようなことを試みました:
db.talks.aggregate([{$project: {_id: 0, comments: "$comments"}}, {$unwind: "$comments"}, {$group: {_id: "$comments.author", count: {$sum: 1}}}, {$sort: {count: -1}}, {$first: "$_id"}])

私は他の実装を試しましたが、いつ/どこで実装するかを理解できないよう$firstです$last

助言がありますか?

0 投票する
1 に答える
5721 参照

node.js - mongodb集約フレームワークのネストされた配列は式を減算します

私は深いネストされた配列を持っています、私はいくつかのネストされた配列要素によってグループ化しようとしています、そしてこれを機能させました。ただし、$ subtract式を使用しようとすると、失敗します。どんなポインタでもありがたいです。

最も内側のネストされた配列:$scenes.records.timeProfile.timingが$subtractに対して正しく巻き戻されていないようです。パイプラインのフィールドを減らすために、$ projectを試し、$projectと$groupのさまざまな組み合わせを試してみましたが失敗しました。また、何度も巻き戻そうとしましたが、失敗しました。

0 投票する
4 に答える
3769 参照

ruby-on-rails - Mongoid 集計 $match と Date オブジェクトが機能しませんか?

この構造を持つコレクションにユーザー ドキュメントがあります。

日付に基づいてこれらのドキュメントを簡単にクエリできます。

ログによると:

MOPED: 127.0.0.1:27017 COMMAND database=db command={:count=>"users", :query=>{"activities"=>{"$elemMatch"=>{"date_time_created"=>{"$gte" =>2012-05-10 00:00:00 UTC、"$lt"=>2012-07-12 00:00:00 UTC}}}}} (0.5260ms)

この方法で必要な結果が得られます。

ただし、同じ基準に基づいて新しい集計関数と $match を使用しようとすると、次のようになります。

ログによると:

MOPED: 127.0.0.1:27017 COMMAND database=db command={:aggregate=>"users", :pipeline=>[{"$match"=>{:activities=>{"$elemMatch"=>{"date_time_created" =>{"$gte"=>2012 年 5 月 10 日 (木)、"$lt"=>2012 年 7 月 12 日 (木)}}}}}]} (0.6049ms)

"start_date" と "end_date" は Ruby Date オブジェクトであり、両方のクエリで本質的に同じです。ただし、ログを見ると、さまざまな形式に変更されています。start_date.strftime("%Y-%m-%d") のようなものでフォーマットを強制しようとしても、まだ機能しません。

集約パイプラインには他の関数がありますが、それらを取り出してもエラーが発生します。

集計関数が日付に一致するようにするにはどうすればよいですか?

0 投票する
0 に答える
889 参照

mongodb - Mongodb の集計と日付操作

日付とカウント フィールドを持つドキュメントを含むコレクションを考えてみましょう:

週ごとにカウントを照会したいので、週の初めに切り捨てられた日付でデータをグループ化する必要があります。しかし、mongodb 集約フレームワークでそれを達成する方法はないようです。

私はこのようなことができることを期待していました($dateOfWeek週の初めに日付を切り捨てると想像した日付演算子です):

しかし、それを行うのに適した日付演算子が見つかりませんでした。

mapreduce を使用して実行できることはわかっていますが、JavaScript コードを記述するよりも日付演算子を使用する方がはるかにエレガントです。

0 投票する
1 に答える
1898 参照

mongodb - Mongo の集計コマンドは CPU を十分に活用していません

i7 8コアCPUのWindows 7 x64でMongo 2.2.2を実行しています。当社の実稼働サーバーは、同じバージョンの Mongo を搭載した 256 コアのマシンで Red Hat Enterprise の下で実行されています。

私のWindowsマシンでの次の呼び出しのテストでは

mongo が利用可能なリソースを十分に活用していないことに気付きました。クエリ中の CPU の合計負荷は ~10% です。Process Explorer によると、計算は 1 つのスレッドでのみ行われます。mongod私が持っている8つのコアのうち3つのコアしか使用していないようで、部分的に使用されています。

Mongo のエンジニアは、この実装の理論的根拠を説明していただけますか? 利用可能なリソースがあれば、なぜそれを使わないのか興味があります。私がグループ化しているフィールドのインデックスがあるので、すべてのコアで負荷を並列にしないでください。

特定のクエリが 650 万のドキュメントを含むコレクションで実行されました (mongobackup は 5 GB のファイルを生成します)。だから、それは何もクレイジーではありません。

PS。おまけの質問: GPU の使用を考えたことはありますか? 私のラップトップには1024コアのGPUがあります:)

0 投票する
1 に答える
6889 参照

mongodb - MongoDbのアグリゲーションで条件付きでアンワインドしますか?

MongoDBの集約フレームワークで条件付きアンワインドをコーディングする方法があるかどうかを調べようとしています。

私はこのような集約コマンドを持っています:

部門ごとにオプションのフィルターを追加したいのですが。ユーザーは1つ以上の部門に所属できます。これは、dbでどのように表示されるかを示しています。

user _id sex salesIndex部門{[d1、d2、d3]}

特定の部門のユーザーを検索する場合は、$ unwind句をコーディングしてから、部門ごとに$matchをコーディングします。ただし、両方のシナリオで同じ集計コマンドを使用したいのですが、次のようになります。

これはまったく可能ですか、それとも2つの集計コマンドが必要ですか?

0 投票する
2 に答える
158 参照

mongodb - 集約フレームワークのグループが正しく機能しなくなった

私はこの種の質問は嫌いですが、多分あなたは私に明白なことを指摘することができます。私はMongo2.2.2を使用しています。

インデックスを持つusernameという文字列フィールドを持つ6Mドキュメントのコレクション(レプリカセット内)があります。インデックスは一意ではありませんでしたが、最近私はそれを一意にしました。突然クエリを実行すると、重複しているという誤ったアラームが発生します。

これは

いくつかのドキュメントを含むサンプルコレクションでこのクエリをテストしましたが、期待どおりに機能します。

0 投票する
2 に答える
1922 参照

mongodb - ネストされた操作を使用した MongoDB Aggregation Framework $group

集計する必要がある数値フィールドがいくつかあります。私の文書が次のように構成されているとしましょう:

数値フィールドの 1 つを使用して計算フィールドをパイプラインに追加したい場合は、次のようにすることができます。

これらのフィールドのうちの 2 つに基づいて計算フィールドを追加したい場合は、次のようにすることができます。

さて、私の質問は、$numValue1 + $numValue2 + $numValue3 + $numValue4 を実行する必要がある場合はどうすればよいでしょうか?

またはさらに興味深いことに、$numValue1 * ($numValue2 + $numValue3) / $numValue4?