10

nodejsのmongodbネイティブドライバーを学んでいます。

このように接続します。

var mongo=require("mongodb")

var serv=mongo.Server("localhost", 27017)
var dbase=mongo.Db("MyDatabase", serv)

そして、それは機能します。しかし、同じサーバーを使用して新しいデータベース接続を作成しようとすると、エラーが発生します。

var dbase2=mongo.Db("MyDatabase2", serv)

「エラー: サーバーまたは ReplSet インスタンスは、複数の Db インスタンス間で共有できません」

ただし、最初に新しいサーバー接続を作成すると機能します。

var serv2=mongo.Server("localhost", 27017)
var dbase2=mongo.Db("MyDatabase2", serv2)

私の質問は、サーバー用と Db 用の 2 つの接続関数があるのはなぜですか?

どうしてこう進まないのだろう。

var dbase=mongo.Db("localhost", 27017, "MyDatabase")

これを行う独自の関数を作成したいのですが、別の理由があるのだろうか。

ありがとう。

4

3 に答える 3

3

参考までに、mongoドキュメントのソリューションへのリンクを次に示します。(他のポスターが言及したのと同じ解決策のようです)

http://mongodb.github.com/node-mongodb-native/markdown-docs/database.html#sharing-the-connections-over-multiple-dbs

mongoサーバーへの接続を分離し、次にDBを分離するポイントは、ReplSetサーバーやその他のカスタムパラメーターに接続する場合などです。このようにして、mongodbサーバーに接続する別のプロセスがあります。

データベース接続の呼び出しは、ここにある場合のために別個のものです。mongoサーバーと単一のデータベースに接続するのではなく、複数のデータベースに接続する必要があります。dbとserverへの接続をこのように分離することで、この柔軟性が実現します。

別の解決策:node-mongoskinを使用する

Mongoskinはあなたがやりたいことをします...それは1つのコマンドですべてサーバーとデータベースに接続することを可能にします。モンゴネイティブのソリューションではありませんが、将来のプロジェクトの代替ライブラリとして検討する価値があります。

var mongo = require('mongoskin');
var db = mongo.db('localhost:27017/testDB');
于 2012-08-29T15:38:02.670 に答える
3

価値があるのは、を使用してやりたいことを実行できることDb#db()ですdb.js.

/**
* Create a new Db instance sharing the current socket connections.
*
* @param {String} dbName the name of the database we want to use.
* @return {Db} a db instance using the new database.
* @api public
*/

あなたができるように

var serv=mongo.Server("localhost", 27017);
var dbase=mongo.Db("MyDatabase", serv);
var dbase2=dbase.db("MyDatabase2");
于 2012-08-23T01:42:44.510 に答える
1

これらは2つの別個の異なるアクションであるため、特定のサーバー上のデータベースにクエリを実行するには、DBサーバー(コンピューター)に接続する(または既に接続している)必要があります。使用するデータベースごとに個別のデータベースクエリ接続を作成できますが、同時にサーバーへの同じ接続を使用します。
サーバーは通常、接続の数を制限するため、ほとんどの場合、データベースごとに個別のサーバー接続を作成する必要はありません(データベースが多数ある場合)。

于 2012-08-15T14:17:27.100 に答える