20220109のGoに関する記事は2件です。

MongoDBのfindで配列フィールドの登録数を不等号条件でfilterしたい

概要 MongoDBではフィールドに配列の型を持てますが、その登録数をfindで条件にしたい時もあるかなと思います。 特定の数(例えば配列の中に1個登録)を条件にしたい場合は、$sizeのオペレーターを使用すれば大丈夫ですが、1個以上とか不等号を使いたくなる場合もありますよね。ただ、$sizeは数値型しか設定できないので、例えばarray_field : { $size: { $gt : 1 }のような指定は不可となります。 では、このように不等号を使いたい場合は、どのように対応すれば良いのかというのをメモ書きします。 対応方法 Is there a way to query array fields with size greater than some specified value?にいくつか対応方法が挙げられてます。一番短く書けそうなのが{ “countries.1” : { “$exists” : true } }のような感じで、配列のフィールドに条件を指定したい項番を指定して$existsを指定します。 実装サンプル Golangで実装した場合のサンプルを、以下に記します。以下のサンプルでは、array_fileldの配列に一つ以上の項目が登録されているドキュメントを取得します。 sample.go // コレクション取得までの接続処理は割愛・・ // filter条件の設定 filter := bson.D{{Key: "array_fileld.0", Value: bson.D{ {Key: "$exists", Value: true}}, }} // クエリ発行 cur, err := col.Find(context.Background(), filter) // カーソルからの取得処理は割愛・・
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Golangに入門してみた

Golangに入門してみた 最近、転職活動をしているときにgRPCについての話があり、あまり詳しく知らなかったのでハンズオンしたいな、と思いどうせならgRPCの醍醐味である別言語間での通信を実現してみたいなと思い、現在使えるJavaScript, Python, Rubyに加え、流行のGolangを用いてAPI作ってみたいなと思い、Glangのtutorialをやってみました。 そこで、とりあえずGolangのfor文 + if文を使って平方根を求めるエクササイズがあったので、それをググりながら書いてみた。そこまで難しくないし、ヒントも出されているので、5分くらいで終わったのですが、その回答を載せます。答えは見てないので、非効率なプログラム書いているかもしれませんが、まぁいいでしょう。 エクササイズ内容 こちらのページのエクササイズを行いました。 https://go-tour-jp.appspot.com/flowcontrol/8 回答内容 package main import ( "fmt"; "math" ) func Sqrt(x float64) float64 { z := float64(1) // 初期値 for i := 0; i < 100; i++ { prev_z := z z -= (z*z - x) / (2*z) if math.Abs(prev_z - z) < 0.0000001 { return z } } return z } func main() { fmt.Println(Sqrt(2)) fmt.Println(math.Sqrt(2)) } 出力:---------------------- 1.4142135623730951 1.4142135623730951 math.Sqrt(2)と同様の答えになったので、良いでしょう。 次に値が変化しなくなった (もしくはごくわずかな変化しかしなくなった) 場合にループを停止させます。 この部分をどう再現するかがもっと別の書き方あるような気がしますが、もし他に「この書き方がいいよ!」というのがあれば教えてください。 感想 Golang初めて触ってみましたが、型指定とかあっていいですね。 Pythonは型指定ないので機械学習の実装しているときに、この変数のデータには何が入っているのだろう?と思うことがあるのでGlangで機械学習実装できたら嬉しいですね。 Pythonでも型指定みたいなことできるので、型が間違っていればエラーを出すようにすればいいのでしょうけども。 あと、3,4章くらいtutorialがあるので、それもやってしまおうと思います。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む