問題タブ [mgo]
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.
optimization - MongoDB - mgo ライブラリ (Golang) - 複数の挿入/更新
Insert メソッドと同じように、Collection 構造体で複数のドキュメントに対して Upsert メソッドを使用する方法はありますか? 最適化のために、一度に多くのドキュメントを挿入/更新したいと考えています。mgo API http://godoc.org/labix.org/v2/mgoを見ると、方法が見つかりませんでした。
mongodb - golangでmgoを使用して「_id」値を取得できません
これは私の構造体定義です:
これは、データベースからデータを取得する方法です。
これは、データベースに格納されているオブジェクトの一部です:
これは印刷結果です。
_id
フィールドの実際の値を取得できないようです。常に""
です。どうしたの?
mongodb - MGO - 結果を持つ Mongo から返された空の結果
次のようなGOLANG構造体があります。
レコードを作成し、MongoDB コレクションに正常に挿入しました (CLI mongo プログラムで Mongo にクエリを実行することで結果を確認できるため) - しかし、次のように MGO を使用してクエリを実行しても、何も得られません。
印刷された結果は次のとおりです。
結果: | 結果: | 結果: | 結果: |
レコードの数を尋ねると、正しい数が得られますが、すべてのフィールドのすべての値が空白です。ここで何が欠けているのかわかりません。
go - mgo 構造体の time.Time をリセットします。
単純化された構造体:
(パスワード) リセットが成功すると、ResetToken = "" を設定し、ResetSent を「初期化されていない」別名 0 または初期値または空に設定する必要があります。名前を付けます。
文字列の場合は "" と ",omitempty" で済みますが、time.Time はどうすればいいですか?
go - メモリ不足の致命的なエラー
そこで、約 800k のドキュメントを処理するデーモンを go で作成しましたが、メモリ不足の問題が発生しています。
mongodb からドキュメントを取得したときに見たものから、メモリ使用量はループごとに増加します。
そして、他の機能は次のとおりです。
ループごとに配列を再宣言しているのか、それとも正確に何が起こっているのかはわかりません。
どんな助けでも大歓迎です。
mongodb - mgo エラーを使用してシャードされた MongoDB にアップサートすると、「コレクションの更新オブジェクトに完全なシャード キーが必要です:...」
MongoDB 用のLabix mgo APIを使用して、シャード コレクションに対してインクリメント操作を実行しようとしています。通常のmgo.Change構造体を使用して、シャードされていないコレクションでこれをうまく実行できますが、シャードされたコレクションでこれを実行しようとすると、エラーが発生します:full shard key must be in update object for collection: db_name.collection_name
分割されていないコレクションで機能する元のコードは次のようになります。
ただし、シャードされたコレクションに切り替えると、キーでシャーディングされ、{ci: 1, dt: 1, zi: 1}
上記のエラーが発生します。
デバッグを試みて、mgo を使用して舞台裏で何が起こっているのかを理解しようとし、mongo ターミナルに直接挿入しようとしました。
ただし、これにより別のエラーが発生しました。Can't modify shard key's value. field: ci: "16326" collection: db.collection
これは、最初のエラーを把握したら把握する必要があると思いますが、想定されていないため、 $setOnInsert コマンドでこのエラーをスローするのは奇妙に思えます値を変更し、最初の挿入で設定するだけです。コマンドの $setOnInsert 部分を切り取るとすべてのエラーはなくなりますが、これらの値が設定されていることを確認する方法が必要です。これらの値は、データを取り戻すために作成するクエリで重要になるからです。
私の主な問題に戻ります: MongoDB ターミナルとやり取りするときにドキュメントの更新とアップサートの順序を並べ替えたときに、mgo を通過するときにエラーが発生することがわかったので、非常に厳密に制御しようとしましたbson.D に切り替えることで、mgo.Change 構造体に渡されるドキュメントの順序:
この時点で、変更オブジェクトを印刷すると、 Mongo's documentation[{Update [{$setOnInsert [{_id 11635_2013-12-11} {ci 3599} {dt 2013-12-11} {zi 11635}]} {$inc 0xc21dd9d8d0}]} {Upsert true}]
に従って正確に正しい順序で変更オブジェクトとして渡す必要があると思いますが、それでも同じエラーが発生します。full shard key must be in update object for collection: db.collection
使用collection.Find({_id: ... }).Apply(change, ...)
は可能な代替手段であり、使用すると適切に機能することを認識していますが、シャードされていないコレクションでのテストでは、Upsert (または更新) 関数を使用してパフォーマンスが大幅に向上することを確認しました (約 20 倍高速)。私は毎秒何万ものイベントを扱っているので、速度は絶対に優先事項です。
考えられる限りのことを試してみたような気がするところまで来ており、何が起こっているのかを理解するのを助けようとしている新鮮な目のセットに感謝しているので、どんな助けも感謝します.