タグ付けされた質問 「mongodb」

MongoDBは、スケーラブルで高性能なオープンソースのドキュメント指向のNoSQLデータベースです。多数の言語とアプリケーション開発プラットフォームをサポートしています。サーバー管理に関する質問は、https://dba.stackexchange.comで行うことができます。

12
MongoDB:単一のコマンドで複数のドキュメントを更新する方法は?
次のコード例では、1つのドキュメントのみが更新されることに驚いた。 > db.test.save({"_id":1, "foo":"bar"}); > db.test.save({"_id":2, "foo":"bar"}); > db.test.update({"foo":"bar"}, {"$set":{"test":"success!"}}); > db.test.find({"test":"success!"}).count(); 1 すべてが変更されるまでループして更新を続けることができることはわかっていますが、それはひどく非効率的です。もっと良い方法はありますか?
144 mongodb  document  nosql 

2
配列フィールドにMongoDBの一意の値または別の配列が含まれているかどうかを確認するにはどうすればよいですか?
現在、mongodbを使用しています。 私はブログ投稿コレクションを持っています、そしてブログ投稿は配列であるファイルされたタグを持っています、例えば blogpost1.tags = ['tag1', 'tag2', 'tag3', 'tag4', 'tag5'] blogpost2.tags = ['tag2', 'tag3'] blogpost3.tags = ['tag2', 'tag3', 'tag4', 'tag5'] blogpost4.tags = ['tag1', 'tag4', 'tag5'] これらの検索を行うにはどうすればよいですか 「tag1」を含む ['tag1'、 'tag2']を含む ['tag3'、 'tag4']のいずれかを含む
143 mongodb 

4
MongoDB多対多協会
MongoDBと多対多の関連付けをどのように行いますか? 例えば; たとえば、UsersテーブルとRolesテーブルがあるとします。ユーザーには多くの役割があり、役割には多くのユーザーがいます。SQLランドでは、UserRolesテーブルを作成します。 Users: Id Name Roles: Id Name UserRoles: UserId RoleId MongoDBで同じ種類の関係はどのように処理されますか?

5
インストールされているMongoDBの正確なバージョンを見つける方法
Windows 7のローカルにmongoDB 3.2がインストールされています。その特定のバージョン(3.2.1、3.2.3など)を確認したいのですが。どうすれば見つけられますか?データベースシェル(mongo.exe)を開くと、出力が表示されます。 MongoDBシェルのバージョン:3.2.0 しかし、それは単なるシェルバージョンであり、実際のデータベースバージョンと同じかどうかはわかりません。
142 mongodb 


6
MongoDB / Mongooseは特定の日付でクエリを実行していますか?
特定の日付を照会することは可能ですか? mongoクックブックで、日付範囲のクエリを実行することができることがわかりました 、次のような: db.posts.find({"created_on": {"$gte": start, "$lt": end}}) しかし、それは特定の日付で可能ですか?これは動作しません: db.posts.find({"created_on": new Date(2012, 7, 14) })

10
MongoDBでのトランザクションの不足を回避するにはどうすればよいですか?
同様の質問がここにあることは知っていますが、トランザクションが必要な場合、またはアトミック操作または2フェーズコミットを使用する場合は、通常のRDBMSシステムに切り替えるように指示しています。2番目のソリューションが最良の選択のようです。3つ目は、多くの問題が発生する可能性があり、あらゆる面でテストすることができないため、フォローしたくありません。アトミック操作を実行するためにプロジェクトをリファクタリングするのに苦労しています。これが私の限られた視点から来たのか(これまでSQLデータベースでしか作業していない)のか、それとも実際に実行できないのかはわかりません。 弊社でMongoDBをパイロットテストしたいと思います。私たちは比較的単純なプロジェクト、つまりSMSゲートウェイを選択しました。私たちのソフトウェアがSMSメッセージをセルラーネットワークに送信することを可能にし、ゲートウェイは、実際にはさまざまな通信プロトコルを介してプロバイダーと通信するという汚い仕事をします。ゲートウェイは、メッセージの請求も管理します。サービスを申請するすべての顧客は、いくつかのクレジットを購入する必要があります。システムは、メッセージが送信されると自動的にユーザーの残高を減らし、残高が不足している場合はアクセスを拒否します。また、私たちはサードパーティのSMSプロバイダーのお客様であるため、独自の残高を提供する場合もあります。それらも追跡する必要があります。 複雑さを軽減する場合(外部請求、キューSMS送信)、MongoDBで必要なデータを保存する方法について考え始めました。SQLの世界から来て、ユーザー用の別のテーブル、SMSメッセージ用の別のテーブル、およびユーザーのバランスに関するトランザクションを格納するためのテーブルを作成します。MongoDBのすべてのコレクションを個別に作成するとします。 この簡略化されたシステムで次の手順を実行するSMS送信タスクを想像してください。 ユーザーに十分なバランスがあるかどうかを確認します。十分なクレジットがない場合はアクセスを拒否します 詳細とコストを含むSMSコレクションにメッセージを送信して保存します(ライブシステムではメッセージにstatus属性があり、タスクは配信のためにそれを取得し、現在の状態に応じてSMSの価格を設定します) 送信されたメッセージのコストによってユーザーのバランスを減らす トランザクションをトランザクションコレクションに記録する それで問題は何ですか?MongoDBは、1つのドキュメントに対してのみアトミック更新を実行できます。前のフローでは、なんらかのエラーが発生し、メッセージがデータベースに格納されても、ユーザーの残高が更新されなかったり、トランザクションがログに記録されなかったりする場合があります。 私は2つのアイデアを思いつきました: ユーザーの単一のコレクションを作成し、残高をフィールドとして保存し、ユーザー関連のトランザクションとメッセージをユーザーのドキュメントのサブドキュメントとして保存します。ドキュメントをアトミックに更新できるため、実際にはトランザクションの問題が解決されます。短所:ユーザーが多数のSMSメッセージを送信すると、ドキュメントのサイズが大きくなり、4MBのドキュメント制限に達する可能性があります。そのようなシナリオで履歴ドキュメントを作成できるかもしれませんが、これは良い考えではないと思います。また、同じ大きなドキュメントにさらに多くのデータをプッシュすると、システムがどのくらい高速になるかわかりません。 ユーザー用とトランザクション用に1つのコレクションを作成します。トランザクションには、正の残高変更のあるクレジット購入と負の残高変更のある送信メッセージの 2種類があります。トランザクションにはサブドキュメントがある場合があります。たとえば、送信されたメッセージでは、SMSの詳細をトランザクションに埋め込むことができます。欠点:現在のユーザーの残高は保存しないので、ユーザーがメッセージを送信しようとするたびに計算して、メッセージが通過できるかどうかを判断する必要があります。保存されたトランザクションの数が増えると、この計算が遅くなる可能性があります。 どの方法を選択するかについて少し混乱しています。他の解決策はありますか?これらの種類の問題を回避する方法に関するオンラインのベストプラクティスを見つけることができませんでした。NoSQLの世界に慣れようとするプログラマーの多くは、最初は同様の問題に直面していると思います。

6
Mongooseで既存のコレクションにアクセスする方法は?
questionデータベースに300のオブジェクトの大規模なコレクションがありますtest。MongoDBのインタラクティブシェルを介して、このコレクションを簡単に操作できます。しかし、express.jsアプリケーションでMongooseを介してコレクションを取得しようとすると、空の配列が取得されます。 私の質問は、エクスプレスで再作成する代わりに、この既存のデータセットにアクセスするにはどうすればよいですか?ここにいくつかのコードがあります: var mongoose = require('mongoose'); var Schema = mongoose.Schema; mongoose.connect('mongodb://localhost/test'); mongoose.model('question', new Schema({ url: String, text: String, id: Number })); var questions = mongoose.model('question'); questions.find({}, function(err, data) { console.log(err, data, data.length); }); これは出力します: null [] 0

10
MongoDBコンソールの_idで削除
MongoDBコンソールで、IDを使用してレコードを削除するにはどうすればよいですか?これが私のコレクションです: [ { "_id" : { "$oid" : "4d512b45cc9374271b02ec4f" }, "name" : "Gazza" }, { "_id" : { "$oid" : "4d513345cc9374271b02ec6c" }, "name" : "Dave", "adminOf" : { }, "email" : "email@email.com" } ] そして、ここで私が試したコマンドが機能しません: db.test_users.remove( {"_id":{"$oid":new ObjectId("4d512b45cc9374271b02ec4f")}}); db.test_users.remove( {"_id":{"$oid":"4d513345cc9374271b02ec6c"}}); db.test_users.remove( {"_id":"4d512b45cc9374271b02ec4f"}); db.test_users.remove( {"_id":new ObjectId("4d512b45cc9374271b02ec4f")}); 名前による削除は機能します: db.test_users.remove( {"name":"Gazza"}); これは、mongodb.orgのブラウザシェルにあります。 ありがとう
137 mongodb 

6
BadValue無効か、ユーザーロケールが設定されていません。LANGおよび/またはLC_ *環境変数が正しく設定されていることを確認してください
を実行するとmongo、次の警告が表示されます。 グローバル初期化に失敗しました:BadValueが無効か、ユーザーロケールが設定されていません。LANGおよび/またはLC_ *環境変数が正しく設定されていることを確認してください。
136 linux  mongodb  ubuntu 

11
Linux / OS Xでmongodサービスを開始する正しい方法は何ですか?
私はmongodbをインストールし、それを実行し、操作し、単純なDB読み取り/書き込みタイプのことを行うことができました。現在、mongodをサービスとして実行するようにMacをセットアップしようとしています。 「コマンドが見つかりません」というメッセージが表示されます。 init mongod start に応答して: ~: service mongod start service: This command still works, but it is deprecated. Please use launchctl(8) instead. service: failed to start the 'mongod' service そして私が試した場合: ~: launchctl start mongod launchctl start error: No such process 明らかに、私は少し誤解しています。次のステップは、何かが機能するまでランダムな文字を入力しているようです。コマンドない仕事がある:mongod --quiet &私はわからないんだけど、多分それはあなたがそれを行うことになっている方法ですか?多分私は「静かなモード」を外し> /logs/mongo.logてコマンドラインの最後に追加するだけですか? Linuxサーバーで同じことを行うことを目的として、Macで開発環境を構築しています。Bashコマンドについてはよくわかりません。答えを引き上げようとする他のすべての検索では、Windowsマシンに関するアドバイスが得られます。 多分誰かがコマンドのLinuxバージョンを知っていますか? どうもありがとう

5
MongoDB / NoSQL:ドキュメントの変更履歴の保持
データベースアプリケーションでかなり一般的な要件は、データベース内の1つ以上の特定のエンティティへの変更を追跡することです。これは行のバージョン管理、ログテーブル、または履歴テーブルと呼ばれます(他にも名前があるはずです)。RDBMSでこれにアプローチする方法はいくつかあります。すべてのソーステーブルからのすべての変更を単一のテーブル(ログの詳細)に書き込むか、ソーステーブルごとに個別の履歴テーブルを作成できます。また、ロギングをアプリケーションコードで管理するか、データベーストリガーを介して管理するかを選択できます。 同じ問題の解決策がNoSQL /ドキュメントデータベース(具体的にはMongoDB)でどのように見えるか、そしてそれがどのように統一された方法で解決されるかを考えています。ドキュメントのバージョン番号を作成するのと同じくらい簡単で、それらを上書きすることはありませんか?「実際の」ドキュメントと「ログに記録された」ドキュメントのコレクションを個別に作成しますか?これはクエリとパフォーマンスにどのように影響しますか? とにかく、これはNoSQLデータベースの一般的なシナリオですか?その場合、一般的な解決策はありますか?
134 mongodb  nosql 

10
MongoClient v3.0を使用する場合、db.collectionは関数ではありません
私は、MongoDBを使用してnodeJSでW3schoolsチュートリアルを試しています。 この例をnodeJS環境に実装し、AJAX呼び出しで関数を呼び出すと、次のエラーが発生します。 TypeError: db.collection is not a function at c:\Users\user\Desktop\Web Project\WebService.JS:79:14 at args.push (c:\Users\user\node_modules\mongodb\lib\utils.js:431:72) at c:\Users\user\node_modules\mongodb\lib\mongo_client.js:254:5 at connectCallback (c:\Users\user\node_modules\mongodb\lib\mongo_client.js:933:5) at c:\Users\user\node_modules\mongodb\lib\mongo_client.js:794:11 at _combinedTickCallback (internal/process/next_tick.js:73:7) at process._tickCallback (internal/process/next_tick.js:104:9) 以下に私の実装したコードを見つけてください: var MongoClient = require('mongodb').MongoClient; var url = "mongodb://localhost:27017/mytestingdb"; MongoClient.connect(url, function(err, db) { if (err) throw err; db.collection("customers").findOne({}, function(err, result) { if (err) …
132 node.js  mongodb 

4
mongooseでObjectIdを生成するにはどうすればよいですか?
ObjectIdMongooseでMongoDBを生成したいのですが。ObjectIdMongooseからコンストラクタにアクセスする方法はありますか? この質問は、ゼロから新しいもの ObjectIdを生成することについてです。生成されたIDは、まったく新しい一意のIDです。 別の質問はObjectId、既存の文字列表現からを作成することについて尋ねます。この場合、IDの文字列表現はすでに存在しており、普遍的に一意である場合とそうでない場合があります。また、IDをに解析していObjectIdます。

3
MongoDBでフィールドが存在することを確認する
したがって、フィールドセットがあり、nullではないすべてのレコードを検索しようとしています。 私はを使ってみ$existsましたが、MongoDBのドキュメントによれば、このクエリはnullに等しいフィールドを返します。 $exists null値を格納するフィールドを含むドキュメントに一致します。 だから私は今私がこのようなことをしなければならないと仮定しています: db.collection.find({ "fieldToCheck" : { $exists : true, $not : null } }) しかし、これを試すたびにエラーが発生します。[invalid use of $not] 誰でもこれを照会する方法を知っていますか?
131 mongodb 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.