node.js nodejs怎么连接数据库mongo

Mongoose,nodejs和mongodb的连接器。
今天我们将学习Mongoose,什么是Mongoose呢,它于MongoDB又是什么关系呢,它可以用来做什么呢,介绍Mongoose之前,我们先简单了解一下MongoDB。
MongoDB是一个开源的NoSQL数据库,相比MySQL那样的关系型数据库,它更显得轻巧、灵活,非常适合在数据规模很大、事务性不强的场合下使用。同时它也是一个对象数据库,没有表、行等概念,也没有固定的模式和结构,所有的数据以文档的形式存储(文档,就是一个关联数组式的对象,它的内部由属性组成,一个属性对应的值可能是一个数、字符串、日期、数组,甚至是一个嵌套的文档。),数据格式就是JSON。
介绍了MongoDB,我们下面就要认识Mongoose了。
1. Mongoose是什么?
Mongoose是MongoDB的一个对象模型工具,是基于node-mongodb-native开发的MongoDB nodejs驱动,可以在异步的环境下执行。同时它也是针对MongoDB操作的一个对象模型库,封装了MongoDB对文档的的一些增删改查等常用方法,让NodeJS操作Mongodb数据库变得更加灵活简单。
2. Mongoose能做什么?
Mongoose,因为封装了对MongoDB对文档操作的常用处理方法,让NodeJS操作Mongodb数据库变得easy、easy、So easy!
学习了上面的介绍,相信你已经对Mongoose有了初步的认识和了解,千里之行,始于足下,奔跑吧,少年!
前面我们已经认识了Mongoose,也了解了MongoDB,回顾一下:MongoDB是一个对象数据库,是用来存储数据的;Mongoose是封装了MongoDB操作的一个对象模型库,是用来操作这些数据的。
好,下面我们就来进行操作数据的第一步吧。
1. 安装mongoose:
&npm&install&mongoose
2. 引用mongoose:
&var&mongoose&=&require("mongoose");
3. 使用"mongoose"连接数据库:
&var&db&=&mongoose.connect("mongodb://user:pass@localhost:port/database");
4. 执行下面代码检查默认数据库test,是否可以正常连接成功?
&var&mongoose&=&require("mongoose");&&
&var&db&=&mongoose.connect("mongodb://127.0.0.1:27017/test");&
&db.connection.on("error",&function&(error)&{&&console.log("数据库连接失败:"&+&error);&});&
&db.connection.on("open",&function&()&{&&console.log("------数据库连接成功!------");&});
通过上节内容的学习我们已经打下了基础,本节内容就开始对MongoDB数据库进行具体操作。首先,我们再次简单介绍一下MongoDB数据库。
MongoDB —— 是一个对象数据库,没有表、行等概念,也没有固定的模式和结构,所有的数据以Document(以下简称文档)的形式存储(Document,就是一个关联数组式的对象,它的内部由属性组成,一个属性对应的值可能是一个数、字符串、日期、数组,甚至是一个嵌套的文档。),后面我们会学习如何创建文档并插入内容。
在MongoDB中,多个Document可以组成Collection(以下简称集合),多个集合又可以组成数据库。
我们想要操作MongoDB数据,那就得先要具备上面所说的包含数据的“文档”,文档又是什么意思呢,请看如下介绍。
文档 —— 是MongoDB的核心概念,是键值对的一个有序集,在JavaScript里文档被表示成对象。同时它也是MongoDB中数据的基本单元,非常类似于关系型数据库管理系统中的行,但更具表现力。
集合 —— 由一组文档组成,如果将MongoDB中的一个文档比喻成关系型数据库中的一行,那么一个集合就相当于一张表。
如果我们要通过Mongoose去创建一个“集合”并对其进行增删改查,该怎么实现呢,到这里我们就要先了解Schema(数据属性模型)、Model、Entity了。
好,下面就开始去深入了解它们吧!
Schema简述
Schema —— 一种以文件形式存储的数据库模型骨架,无法直接通往数据库端,也就是说它不具备对数据库的操作能力,仅仅只是数据库模型在程序片段中的一种表现,可以说是数据属性模型(传统意义的表结构),又或着是“集合”的模型骨架。
那如何去定义一个Schema呢,请看示例:
var&mongoose&=&require("mongoose");
var&TestSchema&=&new&mongoose.Schema({
&name&:&{&type:String&},//属性name,类型为String
&age&:&{&type:Number,&default:0&},//属性age,类型为Number,默认为0
&time&:&{&type:Date,&default:Date.now&},
&email:&{&type:String,default:''}
基本属性类型有:字符串、日期型、数值型、布尔型(Boolean)、null、数组、内嵌文档等。
Model —— 由Schema构造生成的模型,除了Schema定义的数据库骨架以外,还具有数据库操作的行为,类似于管理数据库属性、行为的类。
如何通过Schema来创建Model呢,如下示例:
var&db&=&mongoose.connect("mongodb://127.0.0.1:27017/test");&&
//&创建Model&var&TestModel&=&db.model("test1",&TestSchema);
test1:数据库中的集合名称,当我们对其添加数据时如果test1已经存在,则会保存到其目录下,如果未存在,则会创建test1集合,然后在保存数据。
拥有了Model,我们也就拥有了操作数据库的金钥匙,在后面的内容中,我们就会学习使用Model来进行增删改查的具体操作,所以,一定要熟悉他的创建格式哟!
如果你想对某个集合有所作为,那就交给Model模型来处理吧,创建一个Model模型,我们需要指定:1.集合名称,2.集合的Schema结构对象,满足这两个条件,我们就会拥有一个操作数据库的金钥匙。
Entity简述
Entity —— 由Model创建的实体,使用save方法保存数据,Model和Entity都有能影响数据库的操作,但Model比Entity更具操作性。
使用Model创建Entity,如下示例:
&var&TestEntity&=&new&TestModel({&&&
&name&:&"Lenka",&&age&:&36,&&email:&""&});&
&console.log(TestEntity.name);&//&Lenka&
&console.log(TestEntity.age);&//&36
创建成功之后,Schema属性就变成了Model和Entity的公共属性了。
基于前面的内容,接下来我们就开始学习对数据的具体操作了,下面是关于一些基础数据的定义,相信对于你来说已经不陌生了,请在仔细温习一遍吧!
为了方便后面内容的学习和提高您的学习效率,以下基础数据均和后面内容紧密相连,所以必须按照以下结构方式来定义,请勿修改(默认数据库为test,集合为test1)。
&var&mongoose&=&require("mongoose");&&
&var&db&=&mongoose.connect("mongodb://127.0.0.1:27017/test");&
&var&TestSchema&=&new&mongoose.Schema({&&
&&&&&name&:&{&type:String&},&&
&&&&&age&:&{&type:Number,&default:0&},&&
&&&&&email:&{&type:String&},&&
&&&&&time&:&{&type:Date,&default:Date.now&}&
&var&TestModel&=&db.model("test1",&TestSchema&);&
&var&TestEntity&=&new&TestModel({&&
&&&&&name&:&"helloworld",&&
&&&&&age&:&28,&&
&&&&&email:&""&
&TestEntity.save(function(error,doc){&&
&if(error){&&
&&&&console.log("error&:"&+&error);&&
&&&&console.log(doc);&&}&
更多内容和练习请可以看看我写的免费内容:Node.js 教程
Node.js 连接 MongoDB
MongoDB是一种文档导向数据库管理系统,由C++撰写而成。
本章节我们将为大家介绍如何使用 Node.js 来连接 MongoDB,并对数据库进行操作。
如果你还没有 MongoDB 的基本知识,可以参考我们的教程:。
本教程使用了进行安装:
$ cnpm install mongodb
接下来我们来实现增删改查功能。
数据库操作( CURD )
与 MySQL 不同的是 MongoDB 会自动创建数据库和集合,所以使用前我们不需要手动去创建。
以下实例我们连接数据库 runoob 的 site 表,并插入两条数据:
var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/runoob'; # 数据库为 runoob
var insertData = function(db, callback) {
var collection = db.collection('site');
var data = [{&name&:&菜鸟教程&,&url&:&&},{&name&:&菜鸟工具&,&url&:&&}];
collection.insert(data, function(err, result) {
console.log('Error:'+ err);
callback(result);
MongoClient.connect(DB_CONN_STR, function(err, db) {
console.log(&连接成功!&);
insertData(db, function(result) {
console.log(result);
db.close();
执行以下命令输出就结果为:
$ node test.js
连接成功!
{ result: { ok: 1, n: 2 },
[ { name: '菜鸟教程',
_id: 58c25e13a08de70d3b9d4116 },
{ name: '菜鸟工具',
_id: 58c25e13a08de70d3b9d4117 } ],
insertedCount: 2,
insertedIds: [ 58c25e13a08de70d3b9de13a08de70d3b9d4117 ] }
从输出结果来看,数据已插入成功。
我们也可以打开 MongoDB 的客户端查看数据,如:
& show dbs
# 自动创建了 runoob 数据库
& show tables
# 自动创建了 site 集合(数据表)
& db.site.find()
# 查看集合中的数据
{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c8"), "name" : "菜鸟教程", "url" : "" }
{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c9"), "name" : "菜鸟工具", "url" : "" }
以下实例检索 name 为 "菜鸟教程" 的实例:
var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/runoob';
var selectData = function(db, callback) {
var collection = db.collection('site');
var whereStr = {&name&:'菜鸟教程'};
collection.find(whereStr).toArray(function(err, result) {
console.log('Error:'+ err);
callback(result);
MongoClient.connect(DB_CONN_STR, function(err, db) {
console.log(&连接成功!&);
selectData(db, function(result) {
console.log(result);
db.close();
执行以下命令输出就结果为:
连接成功!
[ { _id: 58c25f300cd56e0d7ddfc0c8,
name: '菜鸟教程',
url: '' } ]
我们也可以对数据库的数据进行修改,以下实例将
name 为 "菜鸟教程" 的 url 改为 :
var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/runoob';
var updateData = function(db, callback) {
var collection = db.collection('site');
var whereStr = {&name&:'菜鸟教程'};
var updateStr = {$set: { &url& : && }};
collection.update(whereStr,updateStr, function(err, result) {
console.log('Error:'+ err);
callback(result);
MongoClient.connect(DB_CONN_STR, function(err, db) {
console.log(&连接成功!&);
updateData(db, function(result) {
console.log(result);
db.close();
执行成功后,进入 mongo 管理工具查看数据已修改:
& db.site.find()
{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c8"), "name" : "菜鸟教程", "url" : "" }
{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c9"), "name" : "菜鸟工具", "url" : "" }
以下实例将
name 为 "菜鸟工具" 的数据删除 :
var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/runoob';
var delData = function(db, callback) {
var collection = db.collection('site');
var whereStr = {&name&:'菜鸟工具'};
collection.remove(whereStr, function(err, result) {
console.log('Error:'+ err);
callback(result);
MongoClient.connect(DB_CONN_STR, function(err, db) {
console.log(&连接成功!&);
delData(db, function(result) {
console.log(result);
db.close();
执行成功后,进入 mongo 管理工具查看数据已删除:
& db.site.find()
{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c8"), "name" : "菜鸟教程", "url" : "" }
反馈内容(*必填)
截图标记颜色
联系方式(邮箱)
联系邮箱:
投稿页面:
记住登录状态
重复输入密码[MongoDB学习笔记-02]Node.js连接MongoDB的两种方法
MongoDB Node.js驱动程序是被官方所支持的原生Node.js驱动程序,他是至今为止最好的实现, 并且得到了MongoDB官方的支持。MongoDB团队已经采用MongoDB Node.js驱动程序作为标准方法。vcD4NCjxwcmUgY2xhc3M9"brush:">
npm install mongodb@1.4.3
// MongoDB Node.js驱动程序
npm install mongoose@3.8.8
//mongoose模块
要从Node.js连接MongoDB我们有两种方法可选择:
通过实例化mongodb模块中提供的mongodbClient类,然后使用这个实例化的对象来创建和管理mongodb连接; 使用字符串进行连接;
1、通过client对象连接到MongoDB
通过实例化一个MongoClient对象连接MongoDB数据库是最常用也是最佳的方式。
创建MongoClient对象实例的语法:
MongoClient( server, options );
server : 一个serverd对象;
options : 数据库连接选项;
如上图所示,MongoClient连接利用了后台的Server对象。这个对象的功能就是定义了MongoDB驱动程序怎么连接到服务器。
下面,看一个示例:
var MongoClient = require('mongodb').MongoClient,
= require('mongodb').
// 创建客户端连接对象
var client = new MongoClient( new Server('localhost', 27017, {
socketOpations: { connectTimeoutMS: 500 },
poolSize: 5,
auto_reconnect: true
numberOfRetries: 3,
retryMilliSeconds: 500
// 打开对服务器端MongoDB数据库的连接
client.open(function(err, client) {
if ( err ) {
console.log('连接失败!');
var db = client.db('blogdb');
// 建立到数据库blogdb的连接
if ( db ) {
console.log('连接成功');
db.authenticate('username', 'pwd', function(err, result) {
// 对用户数据库身份进行验证
if ( err ) {
console.log('数据库用户身份验证失败');
client.close();
// 关闭对MongoDB的连接
console.log('连接已关闭......');
console.log('用户身份验证通过');
db.logout(function (err, result) {
// 关闭对数据库的连接,即退出数据库
if ( !err ) {
console.log('退出数据库出错');
client.close();
// 关闭对MongoDB的连接
console.log( '已关闭连接......' );
注意: 要注销数据库,要使用数据库对象上的logout()方法。这将关闭到该数据库上的连接,你不在可以使用Db对象。例如: db.logout();而要关闭到MongoDB的连接,要在客户端连接上调用close()方法,例如: client.close()。
首先,我们在连接数据库的时候会用到一个关于写入关注级别的问题,说白了,个人理解的话就是相当于出现问题的一个处理优先顺序,你可以选择写入数据库之前是否需要你确认之类的,或者发生错误是否忽略之类的等等,如下图:
写 入 级 别
网络错误被忽略
写确认是不必要的
请求写确认
写确认请求跨主服务器和副本集中的一个辅助服务器
写确认是从副本集的主服务器请求的
用来创建MongoClient连接的Server对象的选项,如下:
用来创建MongoClient连接的数据库连接选项,如下:
2、通过一个连接字符串连接到MongoDB
这种方式要调用MongoClient类的connect( )方法。connect使用语法如下:
MongoClient.connect(connString, options, callback)
connString字符串的语法如下:
mongodb://username:password@host:port/database?opations
MongoClient连接字符串组件:
mongodb://
指定字符串使用mongodb的连接格式
验证时使用的用户名。可选
身份验证时使用的密码。可选
MongoDB服务器主机名或者域名。它可以是多个host:port组合来连接多个MongoDB服务器。 例如:mongodb://host1:270017, host2://270017, host3:270017/testDB
连接MongoDB服务器时使用的端口。默认值是27017
要连接的数据库的名字。 默认为admin
连接时所使用的选项的键值对。可以在dbOpt和serverOpt参数上指定这些选项
下面,看一个使用连接字符串方法连接MongoDB数据库的示例:
var MongoClient = require('mongodb').MongoC
MongoClient.connect('mongodb://mongodb:test@localhost:27017/blogdb', {
db: { w: 1, native_parser: false },
poolSize: 5,
socketOpations: { connectTimeoutMS: 500 },
auto_reconnect: true
replSet: {},
mongos: {}
}, function(err, db) {
if ( err ) {
console.log('连接失败!');
console.log('连接成功!');
// 注销数据库
db.logout(function(err, result) {
if ( err ) {
console.log('注销失败...');
db.close();
// 关闭连接
console.log('连接已经关闭!');windows上nodejs连接mongodb - ITeye问答
公司在Windows上用nodejs开发web应用,要连接mongodb数据库,在mongodb.org下了node-mongodb-native的zip包,不知道怎么配置,那位高人给指点一下,拜谢!!!
问题补充:装上Cygwin,执行./configure的时候提示cygwin not supported,郁闷着呢,哎!
问题补充:谢谢kendylxy 写道楼主如果在windows系统上使用node.js访问mongodb比较复杂,
因为要安装node-mongodb-native,安装node-mongodb-native需要运行./configure 、make 和 make install命令,所以首先要安装Cygwin,然后安装node-mongodb-native
安装完成之后就可以在命令行输入node命令了,
然后可以按照一下流程访问mongodb
写一段代码,例如下方,假设文件叫test.js,用node test.js可运行该文件
var mongodb = require("mongodb"),&&
var mongoserver = new mongodb.Server("127.0.0.1", 27017,{}),
var db_connector = new mongodb.Db('test', mongoserver, {});
db_connector.open(function(err, db){
//dosomething
db.close();
采纳的答案
楼主如果在windows系统上使用node.js访问mongodb比较复杂,
因为要安装node-mongodb-native,安装node-mongodb-native需要运行./configure 、make 和 make install命令,所以首先要安装Cygwin,然后安装node-mongodb-native
安装完成之后就可以在命令行输入node命令了,
然后可以按照一下流程访问mongodb
写一段代码,例如下方,假设文件叫test.js,用node test.js可运行该文件
var mongodb = require("mongodb"),&&
var mongoserver = new mongodb.Server("127.0.0.1", 27017,{}),
var db_connector = new mongodb.Db('test', mongoserver, {});
db_connector.open(function(err, db){
//dosomething
db.close();
已解决问题
未解决问题

我要回帖

更多关于 nodejs mongo update 的文章

 

随机推荐