問題タブ [mongoskin]

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 投票する
1 に答える
674 参照

node.js - Mongoskin 接続に失敗しました (エラー: 接続が閉じられました)

私はこれを行おうとしているすべてのテクノロジーにまったく慣れていませんが、(チュートリアルから収集した)単純なコードのように見えるものを持っていますが、それはうまくいきません。Node、Express、Mongoskin/MongoDB を使用しています。データベースに対して操作を試みるたびに、非常に一般的な「接続が閉じられました」というエラーが発生します。私は MongoDB 2.4.6、Mongoskin 0.6.0、Mongo Native 1.3.19 を持っています。MongoDB が実行されており、ターミナルから接続してデータベースを操作できます。Mongo のログを見ると、コードが接続を確立していないことがわかります。open を明示的に呼び出す必要があるのではないかと思いましたが、それでも同じエラーが返されます。

私はばかげたことをしていると確信していますが、困惑しており、助けていただければ幸いです。コードは次のとおりです。

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

node.js - MongoDB で一意性を主張する

webbapp に Node、Express、MongoDB (Mongoskin を使用) を使用しています。

新しいクライアント アカウントは、「会社名」、「担当者」、「電子メール」などの入力を必要とする Web フォームを通じて作成されます...

新しいクライアントを作成するとき、データベースに保存するときに一意でなければならないフィールドがいくつかあります。この入力は、 'Company''Slug'および'Email'です。

会社はユニークである必要があります。 スラッグは会社名から生成され、一意である必要があります。

元。'Café Rosegarden''Cafe Rosegarden'は 2 つの異なる会社名ですが、同じスラッグ 'cafe-rosegarden'を生成します。

Eメール。これは一意である必要があると思います...しかし、実際にはわかりません

現在、これらのフィールドに 3 つの単一の一意のインデックスがあります。

質問 1:インデックスは、フィールドの一意性を主張する唯一の (最善の) 方法ですか?

質問 2:複合インデックスを使用していますが、一意性はどのように処理されますか? たとえば、電子メールは 1 つの特定の会社名と組み合わせて一意である必要があると言えますか?

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

node.js - MongoDB クエリの基準と予測

Node/Express/MongoDB/Mongoskin を使用してアプリを構築しています。

私はデータベースに「クライアント」という名前のコレクションを持っています。ここには、クライアントアカウントに関する情報を含むドキュメントがあります。各クライアント ドキュメントには、次のような送り状オブジェクトを含む配列が含まれています。

質問:すべてのクライアントを表示するスーパー管理者ビューのように、このコレクションからすべてのドキュメントを照会したいが、invoice-array から返される情報を「年」が特定の値に等しいオブジェクトに制限したいとします。たとえば、2013 年は現在の年です。

必要なのはプロジェクションだと思いますが、問題は、プロジェクションが最初に見つけた結果しか返さないことです...

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

javascript - Javascript: オブジェクト プロパティを再帰し、キーまたは値がパターンに一致する場合はプロパティを置き換えます

MongoDB クエリのように見えるユーザー提供の JSON 文字列を受け入れています。それに対して検証と処理を行い、クエリとして MongoDB に発行したいと考えています。

  1. node.jsにMongoSkinドライバーを使用しています
  2. クエリ文字列には _id フィールドが含まれている場合があり、サブドキュメントに埋め込まれている場合があります。
  3. 1 つまたは複数の日付を含めることができます (この場合は、"2013-11-05T15:29:32.128Z" のようなタイムデートです)。ここでは、プロパティ名を制御できないため、キーは「createdOn」、「lastUpdated」、「submitted」などになる可能性があります。

現在、私は以下をやっていますが、奇妙な動作をしています。ネストされたキー ("parent._id" など) の場合、collection.find() に渡すオブジェクトは {'parent_.id':'xyz'} のように見えます。ルート キーの場合は、"_id" のように渡します。 find() は {_id:'xyz'} のように見えます

  1. JSON.parse を使用して、クエリ文字列をオブジェクトに解析します
  2. そのオブジェクトを 2 つの再帰関数に渡します。1 つは ID 用、もう 1 つは日付用です (以下の例)。
  3. 結果のオブジェクトを collection.find() のクエリ パラメータとして使用します。

クエリ文字列は次のようになりますが、私には制御できません。

{"_id":"12o3iu4y2134iouy", "送信済み":"2013-11-05T15:29:32.128Z"}

{"child._id":"12o3iu4y2134iouy", "comment.submitted":"2013-11-05T15:29:32.128Z"}

アプローチに関する提案、または私の関数/アルゴリズムに何か問題がありますか?

更新: ネストされた ID (上記の例の「child._id」) が実際には ObjectId ではなく、子ドキュメントの ObjectId から使用した 24 桁の 16 進数文字列であることを発見しました。

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

node.js - ループ内の単一のドキュメント更新クエリによる複数ドキュメントの更新

Mongoskin を使用して Node/Express/MongoDB でアプリを構築しています。このアプリには、毎月初めに実行されるスケジュール機能があります。

この関数は、次のコードで構成されています。

この関数は、最初にデータベースから利用可能なすべてのクライアント ドキュメントをクエリし、次にこのデータを使用してすべてのクライアントの新しい請求書オブジェクトを作成し、この請求書をクライアントの請求書配列にプッシュしてデータベースに保存します。

現在、ループ内に更新があります。つまり、更新するクライアントが多数ある場合、単一の更新クエリが多数発生します。おそらく 100 ~ 200 を超えるクライアントは期待できません。

質問:この関数と更新クエリを構造化するより良い方法はありますか? 私を悩ませているのは、ループ内の単一のドキュメント更新クエリです...しかし、おそらくこれが正しい方法です。

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

node.js - Mongoskin が nodejs アプリの mongodb から一部の結果をフェッチしない

mongoskin を介して mongodb からデータを読みたかったのです。しかし、localhost:3000/tasks を呼び出そうとすると、nodejs がエラーをスローします。

私のデータベース「todo」には、コレクション「タスク」にいくつかのアイテムがあります。アプリを起動すると、コンソールの結果は正常に機能します。

私が何か間違ったことを書いた場所を誰かが見ることができますか?

エラー メッセージ:

私のapp.js:

/routes/tasks.js の下のルート ファイル

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

node.js - Mongoskin を使用して MongoDB に複数のドキュメントを挿入する

ループを介して複数のドキュメントを挿入しようとしていますが、ObjecId の一意性に問題があります。

私はこの機能を持っています:

最初のドキュメントが作成されて挿入された後、「mongoError: E110000 Duplicate key error index: ...」が表示されます。

質問: このループが同じ ObjectID を持つすべてのドキュメントを挿入しようとするため、生成エラーになるのはなぜですか? ObjectId が毎回ランダムになるようにこれを書き直すにはどうすればよいですか?