問題タブ [subdocument]
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.
node.js - Mongoose がサブドキュメント配列アイテムの _id プロパティを作成しないようにする
サブドキュメント配列がある場合、Mongoose はそれぞれの ID を自動的に作成します。例:
配列内のオブジェクトの ID を作成しないように Mongoose に指示する方法はありますか?
mongodb - MongoDB では、単純なサブドキュメントを使用するのはいつですか?2 フィールド要素を持つ配列はいつですか?
バックグラウンド
各列に名前を付けて、テーブル行を MongoDb ドキュメントとして保存しています。テーブルに対象の列があるとしましょう: Identifier
、Person
、Date
、Count
。MongoDb ドキュメントには、テーブル データとは別に、 で表されるいくつかの追加フィールドもありますtimestamp
。列は固定されていません (これが、最初にスキーマフリー データベースを使用して列を格納する理由です)。
さまざまな複雑なクエリを実行する必要がありますが、これまでのところ特定されていません。クエリのパフォーマンスがボトルネックになることは考えられますが、パフォーマンスについてはあまり心配していません。挿入されると、ドキュメントは変更されず (同じドキュメントがIdentifier
代わりに作成されます)、挿入はそれほど頻繁ではありません (たとえば、1 日あたり 1000 個の新しい MongoDb ドキュメント)。そのため、データ量は時間の経過とともに着実に増加します。
例
簡単なアプローチは、次のような MongoDb ドキュメントのコレクションを持つことです。
オブジェクトごとに 2 つのフィールドを持つ配列を使用して、別のアプローチ (たとえば、この質問の受け入れられた回答) を見てきました。
質問
2番目のアプローチはまったく意味がありますか?
はいの場合、どちらを使用するかをどのように選択しますか? 特に、あるアプローチでは簡単/安価で、別のアプローチでは困難/コストがかかる特定の種類のクエリはありますか? どちらに進むべきかについての「経験則」、または両方の賛否両論のリストはありますか? 1 つのアプローチが不便である実際のケースの例は、特に価値があります。
javascript - mongoDB のサブドキュメントにアクセスする
次のようなすべてのユーザーのウィジェット ドキュメントを使用して、mongoDB にコレクション ユーザーがいます。
ファイル client.js で Widgets データにアクセスしたい。
私はこれを試します:
また
ここで何が間違っていますか?
javascript - mongoDBでサブドキュメントに挿入
コレクションに次のドキュメントがあります。
{id: "1", blabla: "blabla"}
「名前」3の「ウィジェット」に挿入するにはどうすればよいですか?
mongodb - サブドキュメントの $push によるレプリカ セットのラグ
サイト内のユーザー ジャーニーを記録するドキュメントがあります。
マウスの動きは、このドキュメントのサブドキュメントとして保存されます。マウスの動きを記録し、定期的に $push を使用してサブドキュメント配列に追加します。Mongo に関する私の最初の読みから、これは賢明で効率的なアプローチであるように思われました。今はよくわかりません。
最近、レプリカ セットでいくつかの問題が発生しています。使用量が急増すると、セカンダリがプライマリと同期しなくなります。私の oplog を見ると、その時点までのユーザーのマウスの動きの全履歴を含む $set コマンドがたくさんあることに気付きました。Mongo はこの拡張を行っているようで、oplog レコードが不等分になるようです。
JIRAのこの問題に関連していると信じています https://jira.mongodb.org/browse/SERVER-9784
この問題を正しく解釈しましたか? もしそうなら、ワイヤーを介して変更を伝播する非常に非効率的な方法のようです。問題を回避する方法はありますか? マウスの動きを個々の小さなドキュメントに分けたほうがよいでしょうか? または、サブドキュメント配列で動的キーを使用して問題を回避できますか (したがって、$push コマンドを回避します)。
mongodb - 作成時に MongoDb サブドキュメントに「変更しない」という制約を設定することは可能ですか?
MondoDb ドキュメントの特定のサブドキュメントの値を修正したいので、次の更新でそれを変更したり、ドキュメントを変更できるその他の MongoDb 操作を実行したりできません。
たとえば、以下のようなドキュメントが挿入された場合、「eyesColor」の値を変更できないようにします。
{
"id" : "someId",
"name": "Jane",
"eyesColor" : "blue"
}
可能な更新は次のとおりです:
{
"id" : "someId",
"name": "Amy",
"eyesColor" " : "green"
}
そして、この更新後に必要な結果は次のとおりです:
{
"id" : "someId",
私が作成しているプロジェクトには $set および $unset 演算子を使用する可能性がないため、これを行いたいと思います。サブドキュメント (「eyesColor」) の値を取得するために、更新前に既存のドキュメントを読み取ると、作業中のアプリケーションのパフォーマンスが低下します。
実際、私が必要とする制約は、コレクション (上限のあるコレクション) の固定サイズに似ています。違いは、コレクションではなくサブドキュメントにあり、サイズではなくサブドキュメントに含まれる値にあることです。
このタイプの制約に対する解決策はありますか?
java - MongoDB は同一のデータを持つサブドキュメントを複製しますか?
私はMongoDBをまったく初めて使用し、JDOを不可知層として使用して、(多くのプロジェクトの)基本永続化コードをMongoDBに移動することを検討しています。だから私はこの質問を、Bean を基本モデル単位として扱うのが好きな Java 開発者の観点から尋ねています。
私の質問は、サブドキュメントと、それらが独立して存在するのか、MongoDB によって内部的に統合されているのかについてです。つまり、次のようなドメイン構造がある場合:
世帯 - 個人のコレクション
世帯のドキュメントがある場合、複数の人が含まれますが、各人は同じ住所になります。
各アドレスは、MongoDB 内の別個の別個のエンティティになります (それらは同じ「クラス」であり、同じ値を持っています。または、Mongo は、同じエンティティを参照していることを何らかの方法で識別し、各アドレスの UID を内部的に保存しますか?
さらに重要なことには。1 つの住所の郵便番号を更新すると、世帯の住所サブドキュメントのすべてのメンバーがその変更を反映することになりますか?
もしそうなら、それはリレーショナル領域に迷い込んでいるようですが、そのような参照がなければ、恐ろしい非効率が生じるのを見ることができますか?
mongodb - MongoDB で特定のサブドキュメントを更新する際の問題
私の文書は次のようになります。
私のクエリは次のとおりです。
{ txid: '7e621eeb02874ab039a8566fd36f4591e65eca65313875221842c53de6907d6c',
'vin.txid': 'c04c413576307737f3ad48efe5d509ebc883e1d04822b3a2eccf6a80a4482932',
'vin.vout': 0 }
更新は次のとおりです。
しかし、実行すると、vin
配列の 2 番目ではなく最初の項目が更新されます。さて、奇妙なことに、クエリを次のように変更すると:
{ txid: '7e621eeb02874ab039a8566fd36f4591e65eca65313875221842c53de6907d6c',
'vin.txid': 'c04c413576307737f3ad48efe5d509ebc883e1d04822b3a2eccf6a80a4482932'}
その後、正常に動作します。問題は、クエリが で 2 つの要素を検索することだと思いますが、vin
両方で検索する必要があります。私は何を間違っていますか?