开始MongoDB在Node.js应用程序开发中的撰写
这是有关尝试在Node.js中访问IBM Compose提供的MongoDB服务的编码的备忘录。在本备忘录中,我们将使用mongoose作为MongoDB的API库,并且可以通过Bluemix进行访问。
基本常识
关于Compose
请参考一下我调查的关于在 Qiita 上发布的可以在 Bluemix 上使用的 Compose 是什么? 的文章。
关于MongoDB
MongoDB是一种开源软件的面向文档的数据库。它是用C++语言编写的,由MongoDB Inc.进行开发和支持。
MongoDB不是关系数据库(RDBMS),而是被归类为NoSQL数据库。与RDBMS不同,它不是将记录存储在表中,而是使用类似JSON的格式表示称为“文档”的结构化数据,并将这些文档集合作为“集合”进行管理(这些数据的物理存储是以称为BSON的JSON的二进制形式进行的)。集合不具有像RDBMS那样的固定模式。文档可以具有复杂的层次结构,并且可以通过简单的指定执行查询或生成索引。尽管无法像RDBMS那样高效地执行复杂的连接操作,但可以高速进行数据的添加、更新、删除和查询。此外,应用程序可以以符合其自身结构和数据类型的自然方式存储数据,因此根据处理的数据特性,可能比RDBMS更容易且更快地进行开发。
关于猫鼬(mongoose)。
Mongoose为应用程序的数据提供了基于模式的简单解决方案。它包括内置的类型转换、验证、查询构建以及业务逻辑挂钩等功能。(参考资料1)
类似于MongoDB的KVS型数据库具有易于结构化扩展、通过集群服务器配置可线性提升性能以及处理大容量数据的特点。然而,在开发应用程序时,与关系型数据库一样,在编程中保持数据结构的一致性是有困难的。因此,我们需要mongoose提供的解决方案。
连接到MongoDB
在 mongoose 的教程中,作为连接到 MongoDB 的示例代码,提供了下面的简单代码(参考资料1)。
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
在云多租户环境的数据库服务中,使用类似上述的连接方式无法确保安全可靠。因此,提供了严格的认证和加密通信手段,需要按照这些规则进行访问。关于如何从node.js访问【Qiita】Compose MongoDB,我已经在文章中详细描述,请参考。
猫鼬代码模式
模式和模型
从模式中创建模型。
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
// スキーマの作成
var userSchema = new Schema({
name: String,
username: { type: String, required: true, unique: true },
password: { type: String, required: true },
admin: Boolean,
location: String,
meta: {
age: Number,
website: String
},
created_at: Date,
updated_at: Date
});
// モデルの作成
var User = mongoose.model('User', userSchema);
Mongoose文档:模式
Mongoose文档:模型
数据的注册
将数据提供给模型,创建实例。
//モデルの作成
var User = require('./models/user');
// ユーザデータ
var userData = {
name: 'ごま',
username: 'gomagoma',
password: 'hogehoge'
};
// インスタンス作成
var user = new User(userData);
// データベースへ書き込み
user.save(function(err) {
if (err) throw err;
console.log('データ登録成功');
});
猫鼬文档:模型#保存
找出
您可以在find的第一个参数中设置条件。
var User = require('./models/user');
// 全データの読み込み
User.find({}, function(err, users) {
if (err) throw err;
console.log(users);
});
以下为根据用户名进行搜索的示例条件。
var User = require('./models/user');
// ユーザー名に一致する条件で検索
User.find({ username: 'gomagoma' }, function(err, user) {
if (err) throw err;
console.log(user);
});
另外,关于大小比较条件等的例子还可以在以下链接中查看。
monngoose文档:Model#save
更新 – 重新更新
queryの条件に一致するデータをnew_docで置き換えます。
var query = { username: 'gomagoma' }
var new_doc = { username: 'gomagoma', password: 'damedame' }
User.update(query, new_doc, function(err) {
if (err) throw err;
console.log('更新完了');
callback(null);
});
猫鼬文档:Model#update的更新函数
删除
var User = require('./models/user');
// 削除
User.remove({ username: 'gomagoma' }, function(err, user) {
if (err) throw err;
console.log('削除成功');
});
猫鼬文件:模型#删除
示例代码
可以在以下GitHub链接找到可以运行的样例代码文件:
https://github.com/takara9/mongodb_mongoose
这里提供参考资料
(1) Node.js 的优雅 MongoDB 对象建模 http://mongoosejs.com/
(2) 关于可以在 Bluemix 上使用的 Compose 是什么?我进行了调查 http://qiita.com/MahoTakara/items/a614df96059d3d8749a1
(3) mongoDB 官方网页 https://www.mongodb.com/
(4) 维基百科 MongoDB https://ja.wikipedia.org/wiki/MongoDB
(5) Mongoose 文档 http://mongoosejs.com/docs/guide.html