私はmongoDBを初めて使用しており、集約パイプラインの周りに頭を下げるのが難しいです。MongoDB集約パイプラインの問題
私は自分の株式取引に関する情報を保持しているデータベースを作成しています。カットダウンバージョン私のポートフォリオから一つの文書を収集だから少しこの
{
"date" : 2015-12-31T15:50:00.000Z,
"time" : 1550,
"aum" : 1000000,
"basket" :[
{
"_id" : "Microsoft",
"shares" : 10,
"price" : 56.53,
"fx" : 1.0
},
.
.
.
{
"_id" : "GOOG.N",
"shares" : 20,
"price" : 759.69,
"fx" : 1.0
}
]
のように見えるでは、それぞれの日のために、私は(AUM)の管理下に私の資産を追跡し、すべてのリスト私は現在の価格で保持している位置。私がしなければならないことは、ポートフォリオの毎日の純および総エクスポージャーをaumのパーセンテージとして計算することです。ネットエクスポージャーは単純です:すべての株式を超える
sum(shares*price*fx)/aum
。総曝露は、次のとおり
abs(shares*price*fx)/aum
(負の位置が短い位置を意味します)。私は集約フレームワークを使用してこれを単一のクエリとして実行する必要があります。私はいくつかの質問を試みましたが、どれもそれほど明確に機能していないようです。私は暗闇の中をさまよっています。誰か助言を与えることはできますか?私のクエリは、この
db.strategy.aggregate(
// Pipeline
[
// Stage 1
{
$project: {
"_id": 0,
"date":1,
"time":1,
"aum":1,
"strategyName":1,
"gExposure": {$divide: ["$grossExposure","$aum"]}
}
},
// Stage 2
{
$group: {
_id :{ date:"$date",time:"$time",strategyName:"$strategyName"},
grossExposure: { $sum: { $abs: {$multiply: [ "$basket.sysCurShares","$basket.price","$basket.fx" ] } }}
}
},
// Stage 3
{
$sort: {
"_id.date": 1, "_id.time": 1, "_id.strategyName": 1
}
}
]
);
のように見えます
クエリが実行されますが、計算値はゼロです。私の予測は、私が期待しているように、すべてのデータを2次元のテーブルにフラット化したいと思っているので、うまくいきません。
を同じことを行うことができますあなたは何を証明することができればSOコミュニティは、より多くのを助けるように傾斜していますそれが動作していないかどうかに関わらず、試してみました。試した質問を表示できますか? – chridam
私は同意します。現在の試行を追加しました –
最初の '$ project'パイプラインの' $ grossExposure'フィールドは、元のドキュメントスキーマにないので、あらかじめ計算されたフィールドをステップしていますか、それはあなたのコンセプトです苦しんでいる? – chridam