mongodbデータベースを使用してgolangで再作成しようとしているSQL文があります。golang mongodb集約に相当するTransact-SQL
select date,
sum(case when field1 = "true" then 1 else 0) trueField1,
sum(case when field1 = "false" then 1 else 0) falseField1,
sum(case when field2 = "true" then 1 else 0) trueField2,
sum(case when field2 = "false" then 1 else 0) falseField2
from myTable
group by date
私は与えられた日に、いくつかの組み合わせを合計し、それらをダンプする必要がありますが、私はgolang/MongoDBのを経由して、それを達成する方法がわからない午前:私は再作成しようとしている文は次のようです。
編集:ここに私が最後のリクエストごとに持っている出発点があります。 o1からわかるように、最初の合計/カウントで私が何をしているかを示しています。私はまた別のフィールドisDeliveredを合計して同じ日のカウントを返す同じ日付にそれらを合計したいと思います。私はこの仕事をどのように達成するのかという方向性を得ることができますか?
o1 := bson.M{
"$match" : bson.M {
"retailer" : clientId,
"isComplete" : true,
"pkgStatus.finalized" : true,
},
}
o2 := bson.M {
"$project" : bson.M {
"_id" : 1,
"createdAt" : 1,
},
}
o3 := bson.M{
"$group": bson.M{
"_id" : bson.M{ "$dayOfYear": "$createdAt" },
"total" : bson.M{ "$sum" : 1},
"first" : bson.M{ "$min" : "$createdAt" },
},
}
o4 := bson.M {
"$sort" : bson.M { "_id" : 1 },
}
totalMessages := []bson.M{msgsStarted, o2, o3, o4}
operations := []bson.M{o1, o2, o3, o4}
pipe := cMessages.Pipe(operations)
results := []bson.M{}
err := pipe.All(&results)
if err != nil {
fmt.Printf("Error: %s\n", err)
return
}
for _, resultRec := range results {
myDate := fmt.Sprintf("%s", resultRec["first"])
fmt.Printf("%s, %d\n", myDate[0:10], resultRec["total"])
}
EDIT2
スキーマ定義
messages {
"_id" : {
"$oid" : bson.ObjectId
},
"isComplete" : bool,
"status" : {
"cancelled" : bool,
"finalized" : bool,
"delivered" : bool
},
"createdDate" : {
"$date" : ISODate
}
ように私は、$指揮のあなたが前にガイダンスを提供する文や$やコマンドを使用して巣にそれを取るしようとしています私は以下を行うことができます:
sum(case when isComplete = true and status.finalized = true then 1 else 0)
私はb
tf1c := bson.M{"$cond": []interface{}{bson.M{"$eq": []interface{}{"iscomplete", true}}, 1, 0}}
ただし、構文が正確ではありません。私はそれがこのようなものに従うべきであると考えているが、指導のために再び
"$cond": [{
"$and": [{
"$eq": ["isComplete", true]
}, {
"$eq": ["pkgStatus.finalized", true]
}]
}, 1, 0]
感謝を正確に(下の別のstackoverflowのスレッドからである)、それを翻訳する方法がわかりません!
マップは、マップをアンラップするにはどうすればよい
アンラップ?
map[_id:map[date:2014-12-25 retailer:ObjectIdHex("548a9de8a4ea9d690f6df8e4")]]
値を取得する。私は以下を試しましたが、nullを返します。
fmt.Printf("%s\n", resultRec["_id.date"])
は、あなたも[MongoDBの集約フレームワークのドキュメント](HTTPSを読みしようとしています。 //docs.mongodb.com/manual/aggregation/)に質問してください。ところで、NoSQLは、ドキュメントの構造に関する情報が必要ないわけではありません。 –
はい、私はドキュメントを読んだが問題が発生しているので、質問を投稿した理由があります。これは、私たちが問題に遭遇したときに助けを受けなければならない場所であると考えられています。 – CRob
私はここに問題を見ません。問題は、何かをしようとしているときで、試行の結果がうまくいかないときです。問題は、何かがどのように機能しているか理解できず、このことが文書化されていない場合です。あなたのケースでは、私が見ているのは、自分で解決する努力なしに、あなたのために何か仕事を自由にするという要求です。この投稿を書くことを除いて、もちろん。試した質問/コードを表示してください。私たちは、何が間違っているかを見ていきます。 –