13

私はよく理解していません.Node.JSのデータベースについていくつかの調査を行ってきましたが、ほとんどの人がMongoDBやCouchDBなどのNoSQLタイプのデータベースをNode.jsで使用することを推奨しています.

しかし、さらに読むと、NoSQL はリレーショナル データにはあまり適していないことがわかります... しかし、ここで混乱します。ほとんどのビジネス アプリケーション (またはソーシャル ネットワーキング タイプのアプリ) にはリレーショナル データがあります。

たとえば、生徒、教師、クラスがある学校のために Node.JS でアプリケーションを構築しているとします。そこには多くの関係があることがわかります。それでも NoSQL を使用することをお勧めしますか?

4

2 に答える 2

5

ノードのマングースを見てください。これにより、高速アプリケーションのモデルを定義できます。.populate() を使用して、RDBMS システムの外部キーとなるものを効果的に結合できます。

http://mongoosejs.com/docs/populate.html

var mongoose = require('mongoose')
  , Schema = mongoose.Schema

var PersonSchema = new Schema({
  name    : String,
  age     : Number,
  stories : [{ type: Schema.Types.ObjectId, ref: 'Story' }]
});

var StorySchema = new Schema({
  _creator : { type: Schema.Types.ObjectId, ref: 'Person' },
  title    : String,
  fans     : [{ type: Schema.Types.ObjectId, ref: 'Person' }]
});

var Story  = mongoose.model('Story', StorySchema);
var Person = mongoose.model('Person', PersonSchema);

参照の保存

他のドキュメントへの参照の保存は、通常のオブジェクト ID の保存と同じように機能し、ObjectId を割り当てるだけです。

var aaron = new Person({ name: 'Aaron', age: 100 });

aaron.save(function (err) {
  if (err) return handleError(err);

  var story1 = new Story({
    title: "Once upon a timex.",
    _creator: aaron._id    // assign an ObjectId
  });

  story1.save(function (err) {
    if (err) return handleError(err);
    // thats it!
  });
})

人口

これまでのところ、特別なことは何もしていません。Person と Story を作成しただけです。では、ストーリーの _creator への入力を見てみましょう。

Story
.findOne({ title: /timex/ })
.populate('_creator')
.exec(function (err, story) {
  if (err) return handleError(err);
  console.log('The creator is %s', story._creator.name); // prints "The creator is Aaron"
})
于 2012-10-06T05:29:57.610 に答える
5

MongoDB はしばしば Node.js と組み合わせられます。その理由は、共有された非同期の性質と、JSON ベースの mongoDB ドキュメント構造で JavaScript JSON オブジェクトを簡単に使用できるためです。とはいえ、特に複雑なレポートを作成する必要がある場合、mongoDB には欠点があります。私が見つけたより良い説明の 1 つは、mongo で簡単なデータ アクセスを複製するには mysql で結合する必要があるということです。ただし、データを別の方法で結合したい場合は、SQL ではかなり簡単ですが、SQL でははるかに複雑になります。モンゴ。

于 2012-10-06T01:57:40.497 に答える