Node.JS与NoSQL或SQL?

我不是很了解,我一直在为Node.JS的数据库做一些研究,几乎所有人都推荐使用MongoDB或CouchDB之类的NoSQLtypes数据库来与Node一起使用。

但进一步阅读,我发现NoSQL对于关系数据来说并不是那么好……但是这正是我感到困惑的地方:大多数业务应用程序(或社交networkingtypes的应用程序)都有关系数据。

例如,假设我正在Node.JS中为有学生,老师,class级的学校构build一个应用程序。 你可以看到那里有很多关系 你还会推荐使用NoSQL吗?

MongoDB经常与Node.js配对,因为它们具有共享的asynchronous特性,并且因为基于JSON的mongoDB文档结构可以轻松使用javascript JSON对象。 也就是说,mongoDB有其缺点,特别是在复杂的报告必须完成时。 我发现的一个更好的解释是,在mongo中复制简单的数据访问需要在mysql中进行连接,但是如果您想以不同的方式连接数据,那么在SQL中将会非常简单,但是要复杂得多蒙戈。

看看mongoose的节点。 它允许您为快速应用程序定义模型。 您可以使用.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); 

保存参考

将参考文献保存到其他文档的工作方式与通常保存目标相同,只需指定一个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! }); }) 

人口

到目前为止我们没有做任何特别的事情。 我们只是创造了一个人和一个故事。 现在我们来看看填充我们的故事的_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" })