問題タブ [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.

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

mongodb - Windows と Linux での mgo ドライバーによる ObjectID の扱いの違い

mgo ドライバーを使用して MongoDB で動作する Go コードを開発しています。まず、Windows コンピューターで開発しましたが、問題なく動作しました (同じ Windows コンピューターに Mongo DB をインストールした場合)。次に、MongoDB が独自にインストールされている Linux マシンにソース コードをコピーし、そこでビルドしましたが、動作しませんでした。問題は、データベースからオブジェクト「_id」を読み取る方法です。

Windows では、これは通常の 12 バイトの ObjectId であり、次のようになります ( bson.ObjectId.String() を使用して表示):

しかし、Linux では次のようになります。

もちろん、そのオブジェクト ID を参照などに使用することはできません。長さは 17 バイトです。

興味深い点の 1 つは、Windows では、MongoDB シェルが ObjectId を次のように表示することです。

Linux では次のようにします。

文字列"3unF9zhB3vYCq9TjQ"を 1 文字ずつHEX 形式に変換すると、正確に"33756e46397a6842337659437139546a51"になります。したがって、私の理解では、_id を base64 でデコードする代わりに、Linux の mgo ドライバーはそのすべてのバイトを HEX 形式に変換します。

自分で再エンコードする方法を理解できると思いますが、Linuxのmgoドライバーの既知のバグですか、それとも設定などの何かが欠けていますか? プログラムの移植性を維持したいと考えています。

ありがとう。

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

mongodb - Go mgo パッケージの接続プール

記事running-mongodb-queries-concurrently-with-goで、 mgo.DialWithInfo : MongoDB へのソケット接続のプールを維持するセッションを作成しますが、関数DialWithInfoのドキュメントを探していると、何かが見つかりません。それはプール接続について私に話しますが、ダイヤル機能のダイヤル機能で何かを見つけただけですこのメソッドは通常、特定のクラスターに対して一度だけ呼び出されます。その後、取得したセッションで New メソッドまたは Copy メソッドを使用して、同じクラスターへのさらなるセッションが確立されます。これにより、基盤となるクラスターが共有され、接続のプールが適切に管理されます。

  • MGO でプール接続がどのように機能するか、また可能であればこのプールをセットアップする方法を教えてもらえますか?
  • DialWithInfo がプール接続を作成するというのは本当ですか、それとも、このプールを作成するのは Dial 関数だけですか?

前もって感謝します

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

struct - MGO/GOLANG: ドキュメントをアンマーシャリングする構造体

次のようなMongoスキーマがあります。

エントリ ドキュメントの配列は次のようになります。

このようなクエリを実行し、結果を PhoneBook の配列にアンマーシャリングできるように、Golang で PhoneBook 構造体をフォーマットするにはどうすればよいですか?

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

json - GoでBSON-> JSON HTTP応答をストリーミングしますか?

現在、これを http ハンドラーで実行しています。

完全な BSON データが入る前に結果の提供を開始するにはどうすればよいですか?

mgo編集:答えは拡張子を超えてbson. mgo私が見る限り、私が間違っていない限り、完全なドキュメントのみを提供します。コード例が明確に示すように、1 つの (おそらく大きい) ドキュメントがあります

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

mongodb - `[]interface{}` から型 `[]string` をアサートできません

mongodb ( mgo )から取得したデータを処理しようとしています。

残念ながら、文字列のリストの正しい型をアサートできません。私が取り組んでいる機能は次のとおりです。

残念ながら、次の実行時パニックが発生しています。

なぜこれが起こっているのかについて何か考えはありますか?これらの文字列を取得するにはどうすればよいですか?

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

go - mgo を使用した部分更新

次の問題があります。structureデータベースで更新を実行するには、aをに変換する必要がありmap[string]interface{}ます (mgo を mongodb のドライバーとして使用)。

アップデート

mongoDB でドキュメントを部分的に更新する場合、(最適な) 解決策は、マップに変換して不要なフィールドを削除することです。構造体からマップへの変換については、私の他の投稿を参照してください


元の投稿

クライアント側の JavaScript からデータを受け取り、my struct モデルに書き込みます。しかし、一部のフィールドを変更/更新したくないため、構造を に変換しmap[string]interface{}て不要なフィールドを削除する必要があります。

構造をjsonに変換してからマップするのは、フィールドの型が保持されていないため、うまくいきません。たとえば、次の構造を としますImage model

ここまでは順調ですが、クライアント (つまり JavaScript) から情報を受け取ると、ビュー フィールドは文字列になります。クライアントから与えられた json 入力をマップに変換すると、ビュー フィールドは文字列のままになり、この値の内部表現がデータベースで変更されます。次にデータベースからこの画像を読み取ると、Views フィールドはゼロになります (データベースからの文字列表現のため)。

したがって、クライアントからの json 入力を構造体に書き込みます (Views 変数を適切に変換するため)。ただし、所有者の値は変更しないでください (1 つのフォーム データベース)。そのため、構造を map[string]interface{} に再度変換し、データベースを更新する前にそのマップを処理する必要があります。

Views フィールドの文字列タグが int から文字列に変換されるため (マップに変換する場合)、これに json パッケージを使用することはオプションではありません。

これまでのところ、構造をマップに変換するために次の関数を試しました。リフレクション パッケージを使用しており、それを使用する初心者です。パッケージがよくわかりません。

何かアイデアを出していただければ幸いです。ありがとう。

0 投票する
3 に答える
17366 参照

mongodb - mgo を使用して MongoDB にデータを挿入する

Go を使用して MongoDB にデータを挿入しようとしています。

データ構造は次のとおりです。

これは私の挿入機能です:

そして最後に、これは私がそれを呼び出す方法です:

問題は、bsonタグが魔法のように機能することを期待していたのですが、そうではありません。データが次のように保存される代わりに:

{ "_id" : ObjectId("53700d9cd83e146623e6bfb4"), "resource_id" : 7660708, "単語" : "Foo" ...}

次のように保存されます。

{ "_id" : ObjectId("53700d9cd83e146623e6bfb4"), "id" : "", "resourceid" : 7660708, "word" : "Foo"...}

どうすればこれを修正できますか?

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

unit-testing - Go: 複数のパッケージのテストを実行するには?

src/ の下のサブディレクトリの下に複数のパッケージがあり、各パッケージのテストを実行しても問題なくgo test動作しています。

テストが実行されている状態ですべてのテストを実行しようとするgo test ./...と失敗します..

テストはローカル データベース サーバーに対して実行され、各テスト ファイルには db ポインターを持つグローバル変数があります。

データベースでの競合を防ぐために でテストを実行しようとしました-parallel 1が、テストはまだ失敗します。

ここで何が問題になる可能性がありますか?

編集:一部のテストは、欠落している DB エントリで失敗しています。各テストの前後に DB を完全にクリアします。なぜこれが起こっているのか私が考えることができる唯一の理由は、テスト間の競合のためです。

編集2:

私のテストファイルにはそれぞれ2つのグローバル変数があります(mgoを使用):

また、次のセットアップおよびティアダウン機能があります。

各テストは、 と で起動しsetUp()ますdefer tearDown()

また、cfgは次のとおりです。

編集3:

ランダム データベースを使用するように cfg を変更したところ、テストに合格しました。複数のパッケージのテストが並行して実行されているようです。

go testパッケージ間ですべてを順番に実行することを強制することは可能ですか?