node 连接mongodb

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

Node.js连接MongoDB

一些介绍

mongodb https://www.npmjs.com/package/mongodb
github项目地址 https://github.com/mongodb/node-mongodb-native
属于官方提供的mongodb驱动
文档 http://mongodb.github.io/node-mongodb-native/3.1/api/
项目主页 http://mongodb.github.io/node-mongodb-native/
属于一个轮子,已经造好了

安装mongodb

PS C:\Users\mingm\Desktop\node> npm install mongodb --save
npm WARN saveError ENOENT: no such file or directory, open 'C:\Users\mingm\Desktop\node\package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open 'C:\Users\mingm\Desktop\node\package.json'
npm WARN node No description
npm WARN node No repository field.
npm WARN node No README data
npm WARN node No license field.

+ mongodb@3.1.1
added 7 packages from 5 contributors and audited 7 packages in 108.492s
found 0 vulnerabilities

PS C:\Users\mingm\Desktop\node>

创建数据库

好吧,因为各种版本的缘故,需要使用新的解析器。所以需要设置options的参数

useNewUrlParser: true

2.0的驱动程序
旧版本不需要。

PS C:\Users\mingm\Desktop\node> node test.js
数据库连接建立
PS C:\Users\mingm\Desktop\node>
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/mingming";    // 连接的url

MongoClient.connect(url, { useNewUrlParser: true }, (err, db) => {    // 调用封装好的connect按照url建立和MongoDB之间的连接
    if (err) {
        throw err;
    }
    console.log("数据库连接建立");
    db.close();
})

连接以后创建了一个mingming的数据库

> show dbs;
admin   0.000GB
config  0.000GB
local   0.000GB
> use local;
switched to db local
>

查询了一下,还没有,因为没有往里面添加数据

创建集合

即,创建一张表

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/mingming";    // 连接的url

MongoClient.connect(url, { useNewUrlParser: true }, (err, db) => {    // 调用封装好的connect按照url建立和MongoDB之间的连接
    if (err) {
        throw err;
    }
    console.log("数据库连接建立");
    var dbase = db.db('mingming');    // 选择数据库为mingming
    dbase.createCollection('site', (err, res) => {    // 创建数据库为mingming下的site集合
        if(err) {
            throw err;
        }
        console.log('创建集合!');
        db.close();
    });
});
PS C:\Users\mingm\Desktop\node> node test.js
数据库连接建立
创建集合!
PS C:\Users\mingm\Desktop\node>

看一下这张表

> show dbs;
admin     0.000GB
config    0.000GB
local     0.000GB
mingming  0.000GB
> use mingming
switched to db mingming
> show ceoolection;
2018-07-31T23:12:55.014+0800 E QUERY    [js] Error: don't know how to show [ceoolection] :
shellHelper.show@src/mongo/shell/utils.js:1043:11
shellHelper@src/mongo/shell/utils.js:755:15
@(shellhelp2):1:1
> show collections;
site
> db.site.find();
>

CURD

插入数据

PS C:\Users\mingm\Desktop\node> node test.js
文档插入成功!
PS C:\Users\mingm\Desktop\node>
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/mingming";    // 连接的url

MongoClient.connect(url, { useNewUrlParser: true }, (err, db) => {    // 调用封装好的connect按照url建立和MongoDB之间的连接
    if (err) {
        throw err;
    }
    var dbo = db.db('mingming');
    var myobj = { name:"mingming", url:"www.iming.info" };
    dbo.collection('site').insertOne(myobj, (err, res) => {    // mongodb语法 mingming.site.insert(myObj);
        if(err) {
            throw err;
        }
        console.log("文档插入成功!");
        db.close();
    });
});
> db.site.find();
{ "_id" : ObjectId("5b607e4d5b8ced1c5cb8a7e4"), "name" : "mingming", "url" : "www.iming.info" }
{ "_id" : ObjectId("5b607e6ee7b6e82d604d5a4d"), "name" : "mingming", "url" : "www.iming.info" }
>

插入多条数据

> db.site.find().pretty();
{
        "_id" : ObjectId("5b607e4d5b8ced1c5cb8a7e4"),
        "name" : "mingming",
        "url" : "www.iming.info"
}
{
        "_id" : ObjectId("5b607e6ee7b6e82d604d5a4d"),
        "name" : "mingming",
        "url" : "www.iming.info"
}
{
        "_id" : ObjectId("5b6080037aa38239e46c0dc1"),
        "name" : "mingming",
        "url" : "www.iming.info",
        "type" : "cn"
}
{
        "_id" : ObjectId("5b6080037aa38239e46c0dc2"),
        "name" : "google",
        "url" : "www.google.com.hk",
        "type" : "un"
}
{
        "_id" : ObjectId("5b6080037aa38239e46c0dc3"),
        "name" : "twitter",
        "url" : "www.twitter.com",
        "type" : "un"
}
>
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/mingming";    // 连接的url

MongoClient.connect(url, { useNewUrlParser: true }, (err, db) => {    // 调用封装好的connect按照url建立和MongoDB之间的连接
    if (err) {
        throw err;
    }
    var dbo = db.db('mingming');
    var myobj = [
        {name:"mingming", url:"www.iming.info" , type:"cn"},
        {name:"google", url:"www.google.com.hk", type:"un"},
        {name:"twitter", url:"www.twitter.com", type:"un"},
    ];
    dbo.collection('site').insertMany(myobj, (err, res) => {    // mongodb语法 mingming.site.insert(myObj);
        if(err) {
            throw err;
        }
        console.log("文档插入成功!");
        db.close();
    });
});
PS C:\Users\mingm\Desktop\node> node test.js
文档插入成功!
PS C:\Users\mingm\Desktop\node>

查询数据

PS C:\Users\mingm\Desktop\node> node test.js
[ { _id: 5b607e4d5b8ced1c5cb8a7e4,
    name: 'mingming',
    url: 'www.iming.info' },
  { _id: 5b607e6ee7b6e82d604d5a4d,
    name: 'mingming',
    url: 'www.iming.info' },
  { _id: 5b6080037aa38239e46c0dc1,
    name: 'mingming',
    url: 'www.iming.info',
    type: 'cn' },
  { _id: 5b6080037aa38239e46c0dc2,
    name: 'google',
    url: 'www.google.com.hk',
    type: 'un' },
  { _id: 5b6080037aa38239e46c0dc3,
    name: 'twitter',
    url: 'www.twitter.com',
    type: 'un' } ]
PS C:\Users\mingm\Desktop\node>
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/mingming";    // 连接的url

MongoClient.connect(url, { useNewUrlParser: true }, (err, db) => {    // 调用封装好的connect按照url建立和MongoDB之间的连接
    if (err) {
        throw err;
    }
    var dbo = db.db('mingming');
    dbo.collection('site').find({}).toArray((err, result) => {    // 使用find()查询完成以后,使用toArray将查询到的数据完成回调
        if (err) {
            throw err;
        }
        console.log(result);    // 将回调的结果输出(由于结果是暂时保存在内存中的,确保有足够大的内存保存,或者使用流也可)
        db.close();
    });
});;
> db.site.find().pretty();
{
        "_id" : ObjectId("5b607e4d5b8ced1c5cb8a7e4"),
        "name" : "mingming",
        "url" : "www.iming.info"
}
{
        "_id" : ObjectId("5b607e6ee7b6e82d604d5a4d"),
        "name" : "mingming",
        "url" : "www.iming.info"
}
{
        "_id" : ObjectId("5b6080037aa38239e46c0dc1"),
        "name" : "mingming",
        "url" : "www.iming.info",
        "type" : "cn"
}
{
        "_id" : ObjectId("5b6080037aa38239e46c0dc2"),
        "name" : "google",
        "url" : "www.google.com.hk",
        "type" : "un"
}
{
        "_id" : ObjectId("5b6080037aa38239e46c0dc3"),
        "name" : "twitter",
        "url" : "www.twitter.com",
        "type" : "un"
}
>

查询指定条件的数据

PS C:\Users\mingm\Desktop\node> node test.js
[ { _id: 5b607e4d5b8ced1c5cb8a7e4,
    name: 'mingming',
    url: 'www.iming.info' },
  { _id: 5b607e6ee7b6e82d604d5a4d,
    name: 'mingming',
    url: 'www.iming.info' },
  { _id: 5b6080037aa38239e46c0dc1,
    name: 'mingming',
    url: 'www.iming.info',
    type: 'cn' } ]
PS C:\Users\mingm\Desktop\node>
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/mingming";    // 连接的url

MongoClient.connect(url, { useNewUrlParser: true }, (err, db) => {    // 调用封装好的connect按照url建立和MongoDB之间的连接
    if (err) {
        throw err;
    }
    var dbo = db.db('mingming');
    var whereStr = {"name":"mingming"};    // 查询条件
    dbo.collection('site').find(whereStr).toArray((err, result) => {    // 使用find()查询完成以后,使用toArray将查询到的数据完成回调
        if (err) {
            throw err;
        }
        console.log(result);    // 将回调的结果输出(由于结果是暂时保存在内存中的,确保有足够大的内存保存,或者使用流也可)
        db.close();
    });
});;

更新数据

PS C:\Users\mingm\Desktop\node> node test.js
文档更新成功
PS C:\Users\mingm\Desktop\node>
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/mingming";    // 连接的url

MongoClient.connect(url, { useNewUrlParser: true }, (err, db) => {    // 调用封装好的connect按照url建立和MongoDB之间的连接
    if (err) {
        throw err;
    }
    var dbo = db.db('mingming');
    var whereStr = {"name":"mingming"};    // 查询条件
    var updateStr = {$set: {"url": "AmingA"}};
    dbo.collection('site').updateOne(whereStr, updateStr, (err, result) => {    // 使用find()查询完成以后,使用toArray将查询到的数据完成回调
        if (err) {
            throw err;
        }
        console.log('文档更新成功');    // 将回调的结果输出(由于结果是暂时保存在内存中的,确保有足够大的内存保存,或者使用流也可)
        db.close();
    });
});;
> db.site.find({"name":"mingming"}).pretty();
{
        "_id" : ObjectId("5b607e4d5b8ced1c5cb8a7e4"),
        "name" : "mingming",
        "url" : "AmingA"
}
{
        "_id" : ObjectId("5b607e6ee7b6e82d604d5a4d"),
        "name" : "mingming",
        "url" : "www.iming.info"
}
{
        "_id" : ObjectId("5b6080037aa38239e46c0dc1"),
        "name" : "mingming",
        "url" : "www.iming.info",
        "type" : "cn"
}
>

mongodb的更新

> db.site.update({"name":"mingming"}, {$set: {"url":""}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.site.find({"name":"mingming"});
{ "_id" : ObjectId("5b607e4d5b8ced1c5cb8a7e4"), "name" : "mingming", "url" : "" }
{ "_id" : ObjectId("5b607e6ee7b6e82d604d5a4d"), "name" : "mingming", "url" : "www.iming.info" }
{ "_id" : ObjectId("5b6080037aa38239e46c0dc1"), "name" : "mingming", "url" : "www.iming.info", "type" : "cn" }
>

更新多条数据

PS C:\Users\mingm\Desktop\node> node test.js
{ n: 3, nModified: 3, ok: 1 }
PS C:\Users\mingm\Desktop\node>
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/mingming";    // 连接的url

MongoClient.connect(url, { useNewUrlParser: true }, (err, db) => {    // 调用封装好的connect按照url建立和MongoDB之间的连接
    if (err) {
        throw err;
    }
    var dbo = db.db('mingming');
    var whereStr = {"name":"mingming"};    // 查询条件
    var updateStr = {$set: {"url": ""}};
    dbo.collection('site').updateMany(whereStr, updateStr, (err, result) => {    // 使用find()查询完成以后,使用toArray将查询到的数据完成回调
        if (err) {
            throw err;
        }
        console.log(result.result);    // 将回调的结果输出(由于结果是暂时保存在内存中的,确保有足够大的内存保存,或者使用流也可)
        db.close();
    });
});;
> db.site.find({"name":"mingming"});
{ "_id" : ObjectId("5b607e4d5b8ced1c5cb8a7e4"), "name" : "mingming", "url" : "" }
{ "_id" : ObjectId("5b607e6ee7b6e82d604d5a4d"), "name" : "mingming", "url" : "" }
{ "_id" : ObjectId("5b6080037aa38239e46c0dc1"), "name" : "mingming", "url" : "", "type" : "cn" }
>

删除数据

同样deleteOne和deleteMany()不在阐述

排序

使用sort()完成排序

PS C:\Users\mingm\Desktop\node> node test.js
[ { _id: 5b6080037aa38239e46c0dc2,
    name: 'google',
    url: 'www.google.com.hk',
    type: 'un' },
  { _id: 5b6080037aa38239e46c0dc3,
    name: 'twitter',
    url: 'www.twitter.com',
    type: 'un' },
  { _id: 5b6080037aa38239e46c0dc1,
    name: 'mingming',
    url: '',
    type: 'cn' },
  { _id: 5b607e4d5b8ced1c5cb8a7e4, name: 'mingming', url: '' },
  { _id: 5b607e6ee7b6e82d604d5a4d, name: 'mingming', url: '' } ]
PS C:\Users\mingm\Desktop\node>
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/mingming";    // 连接的url

MongoClient.connect(url, { useNewUrlParser: true }, (err, db) => {    // 调用封装好的connect按照url建立和MongoDB之间的连接
    if (err) {
        throw err;
    }
    var dbo = db.db('mingming');
    var mysort = { type:-1 };    // 降序
    dbo.collection('site').find().sort(mysort).toArray((err, result) => {
            if (err) {
            throw err;
        }
        console.log(result);    // 将回调的结果输出(由于结果是暂时保存在内存中的,确保有足够大的内存保存,或者使用流也可)
        db.close();
    });
});;

mongodb语法

> db.site.find({}).sort({type:-1});
{ "_id" : ObjectId("5b6080037aa38239e46c0dc2"), "name" : "google", "url" : "www.google.com.hk", "type" : "un" }
{ "_id" : ObjectId("5b6080037aa38239e46c0dc3"), "name" : "twitter", "url" : "www.twitter.com", "type" : "un" }
{ "_id" : ObjectId("5b6080037aa38239e46c0dc1"), "name" : "mingming", "url" : "", "type" : "cn" }
{ "_id" : ObjectId("5b607e4d5b8ced1c5cb8a7e4"), "name" : "mingming", "url" : "" }
{ "_id" : ObjectId("5b607e6ee7b6e82d604d5a4d"), "name" : "mingming", "url" : "" }
>

分页

使用limit,分页和排序使用的统统是通道(一个来自linux的概念)

PS C:\Users\mingm\Desktop\node> node test.js
[ { _id: 5b607e4d5b8ced1c5cb8a7e4, name: 'mingming', url: '' },
  { _id: 5b607e6ee7b6e82d604d5a4d, name: 'mingming', url: '' } ]
PS C:\Users\mingm\Desktop\node>

跳过指定条数

PS C:\Users\mingm\Desktop\node> node test.js
[ { _id: 5b6080037aa38239e46c0dc1,
    name: 'mingming',
    url: '',
    type: 'cn' },
  { _id: 5b6080037aa38239e46c0dc2,
    name: 'google',
    url: 'www.google.com.hk',
    type: 'un' } ]
PS C:\Users\mingm\Desktop\node>
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/mingming";    // 连接的url

MongoClient.connect(url, { useNewUrlParser: true }, (err, db) => {    // 调用封装好的connect按照url建立和MongoDB之间的连接
    if (err) {
        throw err;
    }
    var dbo = db.db('mingming');
    dbo.collection('site').find().skip(2).limit(2).toArray((err, result) => {
            if (err) {
            throw err;
        }
        console.log(result);    // 将回调的结果输出(由于结果是暂时保存在内存中的,确保有足够大的内存保存,或者使用流也可)
        db.close();
    });
});;

随机读取一条数据

PS C:\Users\mingm\Desktop\node> node test.js
[ { _id: 5b6080037aa38239e46c0dc2,
    name: 'google',
    url: 'www.google.com.hk',
    type: 'un' } ]
[ { _id: 5b6080037aa38239e46c0dc1,
    name: 'mingming',
    url: '',
    type: 'cn' } ]
[ { _id: 5b6080037aa38239e46c0dc2,
    name: 'google',
    url: 'www.google.com.hk',
    type: 'un' } ]
[ { _id: 5b607e6ee7b6e82d604d5a4d, name: 'mingming', url: '' } ]
[ { _id: 5b607e4d5b8ced1c5cb8a7e4, name: 'mingming', url: '' } ]
[ { _id: 5b6080037aa38239e46c0dc1,
    name: 'mingming',
    url: '',
    type: 'cn' } ]
[ { _id: 5b607e4d5b8ced1c5cb8a7e4, name: 'mingming', url: '' } ]
[ { _id: 5b607e6ee7b6e82d604d5a4d, name: 'mingming', url: '' } ]
[ { _id: 5b607e6ee7b6e82d604d5a4d, name: 'mingming', url: '' } ]
[ { _id: 5b607e4d5b8ced1c5cb8a7e4, name: 'mingming', url: '' } ]
PS C:\Users\mingm\Desktop\node> node test.js
[ { _id: 5b6080037aa38239e46c0dc2,
    name: 'google',
    url: 'www.google.com.hk',
    type: 'un' } ]
[ { _id: 5b6080037aa38239e46c0dc1,
    name: 'mingming',
    url: '',
    type: 'cn' } ]
[ { _id: 5b6080037aa38239e46c0dc3,
    name: 'twitter',
    url: 'www.twitter.com',
    type: 'un' } ]
[ { _id: 5b607e6ee7b6e82d604d5a4d, name: 'mingming', url: '' } ]
[ { _id: 5b607e6ee7b6e82d604d5a4d, name: 'mingming', url: '' } ]
[ { _id: 5b6080037aa38239e46c0dc1,
    name: 'mingming',
    url: '',
    type: 'cn' } ]
[ { _id: 5b6080037aa38239e46c0dc1,
    name: 'mingming',
    url: '',
    type: 'cn' } ]
[ { _id: 5b607e4d5b8ced1c5cb8a7e4, name: 'mingming', url: '' } ]
[ { _id: 5b6080037aa38239e46c0dc3,
    name: 'twitter',
    url: 'www.twitter.com',
    type: 'un' } ]
[ { _id: 5b6080037aa38239e46c0dc3,
    name: 'twitter',
    url: 'www.twitter.com',
    type: 'un' } ]
PS C:\Users\mingm\Desktop\node>
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/mingming";    // 连接的url

MongoClient.connect(url, { useNewUrlParser: true }, (err, db) => {    // 调用封装好的connect按照url建立和MongoDB之间的连接
    if (err) {
        throw err;
    }
    var dbo = db.db('mingming');
    for(var i=0; i<10; i++){
        dbo.collection('site').aggregate([{$sample: {size:1}}]).toArray((err, result) => {
                if (err) {
                throw err;
            }
            console.log(result);    // 将回调的结果输出(由于结果是暂时保存在内存中的,确保有足够大的内存保存,或者使用流也可)
        });
    };
    db.close();
});;

使用的同样是管道

博客

www.iming.info

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
21天前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
2月前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
2月前
|
NoSQL 网络安全 MongoDB
MongoDB - 连接
10月更文挑战第12天
19 1
|
2月前
|
NoSQL 前端开发 JavaScript
Node.js 连接 MongoDB
10月更文挑战第20天
42 0
|
2月前
|
NoSQL 前端开发 JavaScript
Node.js 连接 MongoDB
10月更文挑战第9天
54 0
|
2月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
3月前
|
存储 NoSQL 关系型数据库
非关系型数据库-MongoDB技术(二)
非关系型数据库-MongoDB技术(二)
|
8天前
|
存储 NoSQL 关系型数据库
阿里云数据库MongoDB版助力信也科技 打造互联网金融企业样板
我们的风控系统引入阿里云数据库MongoDB版后,解决了特征类字段灵活加减的问题,大大提高了开发效率,极大的提升了业务用户体验,获得了非常好的效果
阿里云数据库MongoDB版助力信也科技 打造互联网金融企业样板
|
1月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
2月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。
下一篇
DataWorks