<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://wiki.eijux.com/index.php?action=history&amp;feed=atom&amp;title=Node.js%EF%BC%9AMongoDB</id>
	<title>Node.js：MongoDB - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.eijux.com/index.php?action=history&amp;feed=atom&amp;title=Node.js%EF%BC%9AMongoDB"/>
	<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=Node.js%EF%BC%9AMongoDB&amp;action=history"/>
	<updated>2026-05-15T15:46:40Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>http://wiki.eijux.com/index.php?title=Node.js%EF%BC%9AMongoDB&amp;diff=6450&amp;oldid=prev</id>
		<title>2023年3月31日 (五) 13:20 Eijux</title>
		<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=Node.js%EF%BC%9AMongoDB&amp;diff=6450&amp;oldid=prev"/>
		<updated>2023-03-31T13:20:23Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2023年3月31日 (五) 21:20的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;第1行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第1行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category:Node.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;js&lt;/del&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category:Node.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;js教程&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 关于 ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 关于 ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Eijux</name></author>
	</entry>
	<entry>
		<id>http://wiki.eijux.com/index.php?title=Node.js%EF%BC%9AMongoDB&amp;diff=4166&amp;oldid=prev</id>
		<title>Eijux：​建立内容为“category:Node.js  == 关于 == &lt;syntaxhighlight lang=&quot;bash&quot; highlight=&quot;&quot;&gt; MongoDB 是一种文档导向数据库管理系统，由 C++ 撰写而成。 &lt;/synta…”的新页面</title>
		<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=Node.js%EF%BC%9AMongoDB&amp;diff=4166&amp;oldid=prev"/>
		<updated>2021-05-31T16:33:46Z</updated>

		<summary type="html">&lt;p&gt;建立内容为“&lt;a href=&quot;/%E5%88%86%E7%B1%BB:Node.js&quot; title=&quot;分类:Node.js&quot;&gt;category:Node.js&lt;/a&gt;  == 关于 == &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt; MongoDB 是一种文档导向数据库管理系统，由 C++ 撰写而成。 &amp;lt;/synta…”的新页面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[category:Node.js]]&lt;br /&gt;
&lt;br /&gt;
== 关于 ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
MongoDB 是一种文档导向数据库管理系统，由 C++ 撰写而成。&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Node.js 连接 MongoDB，并对数据库进行操作。&lt;br /&gt;
&lt;br /&gt;
== 安装驱动 ==&lt;br /&gt;
使用了 cnpm 命令（淘宝定制的命令）进行安装：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
$ cnpm install mongodb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 创建数据库 ==&lt;br /&gt;
要在 MongoDB 中创建一个数据库，首先我们需要创建一个 '''MongoClient''' 对象，然后配置好指定的 URL 和 端口号。&lt;br /&gt;
&lt;br /&gt;
* 如果数据库不存在，MongoDB 将创建数据库并建立连接。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
示例：创建连接&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
var MongoClient = require('mongodb').MongoClient;&lt;br /&gt;
&lt;br /&gt;
var url = &amp;quot;mongodb://localhost:27017/runoob&amp;quot;; &lt;br /&gt;
MongoClient.connect(url, function(err, db) {&lt;br /&gt;
    if (err) throw err;&lt;br /&gt;
    console.log(&amp;quot;数据库已创建!&amp;quot;);&lt;br /&gt;
    db.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 创建集合 ==&lt;br /&gt;
可以使用 createCollection() 方法来创建集合：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
var MongoClient = require('mongodb').MongoClient;&lt;br /&gt;
&lt;br /&gt;
var url = 'mongodb://localhost:27017/runoob';&lt;br /&gt;
MongoClient.connect(url, function (err, db) {&lt;br /&gt;
    if (err) throw err;&lt;br /&gt;
    console.log('数据库已创建');&lt;br /&gt;
    &lt;br /&gt;
    var dbase = db.db(&amp;quot;runoob&amp;quot;);&lt;br /&gt;
    dbase.createCollection('site', function (err, res) {&lt;br /&gt;
        if (err) throw err;&lt;br /&gt;
        console.log(&amp;quot;创建集合!&amp;quot;);&lt;br /&gt;
        db.close();&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数据库操作( CURD ) ==&lt;br /&gt;
与 MySQL 不同的是 MongoDB 会'''自动创建数据库和集合'''，所以使用前我们不需要手动去创建。&lt;br /&gt;
&lt;br /&gt;
=== 查询数据 ===&lt;br /&gt;
'''find()'''：查找数据。&lt;br /&gt;
* find() 可以返回匹配条件的所有数据。 &lt;br /&gt;
* 如果未指定条件，find() 返回集合中的所有数据。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
示例 1：检索所有数据&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
var MongoClient = require('mongodb').MongoClient;&lt;br /&gt;
var url = &amp;quot;mongodb://localhost:27017/&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
MongoClient.connect(url, function(err, db) {&lt;br /&gt;
    if (err) throw err;&lt;br /&gt;
    var dbo = db.db(&amp;quot;runoob&amp;quot;);&lt;br /&gt;
    dbo.collection(&amp;quot;site&amp;quot;). find({}).toArray(function(err, result) { // 返回集合中所有数据&lt;br /&gt;
        if (err) throw err;&lt;br /&gt;
        console.log(result);&lt;br /&gt;
        db.close();&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
示例 2：检索 name 为 &amp;quot;菜鸟教程&amp;quot; 的数据&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
var MongoClient = require('mongodb').MongoClient;&lt;br /&gt;
var url = &amp;quot;mongodb://localhost:27017/&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
MongoClient.connect(url, function(err, db) {&lt;br /&gt;
    if (err) throw err;&lt;br /&gt;
    var dbo = db.db(&amp;quot;runoob&amp;quot;);&lt;br /&gt;
     var whereStr = {&amp;quot;name&amp;quot;:'菜鸟教程'};  // 查询条件&lt;br /&gt;
    dbo.collection(&amp;quot;site&amp;quot;).find(whereStr).toArray(function(err, result) {&lt;br /&gt;
        if (err) throw err;&lt;br /&gt;
        console.log(result);&lt;br /&gt;
        db.close();&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
执行结果：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
[ { _id: 5a794e36763eb821b24db854,&lt;br /&gt;
    name: '菜鸟教程',&lt;br /&gt;
    url: 'www.runoob' } ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 插入数据 ===&lt;br /&gt;
# '''insertOne()'''：插入一条数据。&lt;br /&gt;
# '''insertMany()'''：插入多条数据。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
示例 1：连接数据库 runoob 的 site 表，并插入一条数据条数据：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
var MongoClient = require('mongodb').MongoClient;&lt;br /&gt;
var url = &amp;quot;mongodb://localhost:27017/&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
MongoClient.connect(url, function(err, db) {&lt;br /&gt;
    if (err) throw err;&lt;br /&gt;
    var dbo = db.db(&amp;quot;runoob&amp;quot;);&lt;br /&gt;
    var myobj = { name: &amp;quot;菜鸟教程&amp;quot;, url: &amp;quot;www.runoob&amp;quot; };&lt;br /&gt;
    dbo.collection(&amp;quot;site&amp;quot;).insertOne(myobj, function(err, res) {&lt;br /&gt;
        if (err) throw err;&lt;br /&gt;
        console.log(&amp;quot;文档插入成功&amp;quot;);&lt;br /&gt;
        db.close();&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
执行结果：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
$ node test.js&lt;br /&gt;
文档插入成功&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
打开 MongoDB 的客户端查看数据，如：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt; show dbs&lt;br /&gt;
runoob  0.000GB          # 自动创建了 runoob 数据库&lt;br /&gt;
&amp;gt; show tables&lt;br /&gt;
site                     # 自动创建了 site 集合（数据表）&lt;br /&gt;
&amp;gt; db.site.find()&lt;br /&gt;
{ &amp;quot;_id&amp;quot; : ObjectId(&amp;quot;5a794e36763eb821b24db854&amp;quot;), &amp;quot;name&amp;quot; : &amp;quot;菜鸟教程&amp;quot;, &amp;quot;url&amp;quot; : &amp;quot;www.runoob&amp;quot; }&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
示例 2：连接数据库 runoob 的 site 表，并插入一条数据条数据：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
var MongoClient = require('mongodb').MongoClient;&lt;br /&gt;
var url = &amp;quot;mongodb://localhost:27017/&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
MongoClient.connect(url, function(err, db) {&lt;br /&gt;
    if (err) throw err;&lt;br /&gt;
    var dbo = db.db(&amp;quot;runoob&amp;quot;);&lt;br /&gt;
    var myobj =  [&lt;br /&gt;
        { name: '菜鸟工具', url: 'https://c.runoob.com', type: 'cn'},&lt;br /&gt;
        { name: 'Google', url: 'https://www.google.com', type: 'en'},&lt;br /&gt;
        { name: 'Facebook', url: 'https://www.google.com', type: 'en'}&lt;br /&gt;
       ];&lt;br /&gt;
    dbo.collection(&amp;quot;site&amp;quot;).insertMany(myobj, function(err, res) {&lt;br /&gt;
        if (err) throw err;&lt;br /&gt;
        console.log(&amp;quot;插入的文档数量为: &amp;quot; + res.insertedCount);&lt;br /&gt;
        db.close();&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
其中：res.insertedCount 为插入的条数。&lt;br /&gt;
&lt;br /&gt;
=== 更新数据 ===&lt;br /&gt;
# '''updateOne()'''：更改单条文档数据；&lt;br /&gt;
# '''updateMany()'''：更新所有符合条的文档数据；&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
示例 1：将 name 为 &amp;quot;菜鸟教程&amp;quot; 的 url 改为 &amp;lt;nowiki&amp;gt;https://www.runoob.com&amp;lt;/nowiki&amp;gt;：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
var MongoClient = require('mongodb').MongoClient;&lt;br /&gt;
var url = &amp;quot;mongodb://localhost:27017/&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
MongoClient.connect(url, function(err, db) {&lt;br /&gt;
    if (err) throw err;&lt;br /&gt;
    var dbo = db.db(&amp;quot;runoob&amp;quot;);&lt;br /&gt;
    var whereStr = {&amp;quot;name&amp;quot;:'菜鸟教程'};  // 查询条件&lt;br /&gt;
    var updateStr = {$set: { &amp;quot;url&amp;quot; : &amp;quot;https://www.runoob.com&amp;quot; }};&lt;br /&gt;
    dbo.collection(&amp;quot;site&amp;quot;).updateOne(whereStr, updateStr, function(err, res) {&lt;br /&gt;
        if (err) throw err;&lt;br /&gt;
        console.log(&amp;quot;文档更新成功&amp;quot;);&lt;br /&gt;
        db.close();&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
进入 mongo 管理工具查看数据已修改：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt; db.site.find().pretty()&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;_id&amp;quot; : ObjectId(&amp;quot;5a794e36763eb821b24db854&amp;quot;),&lt;br /&gt;
    &amp;quot;name&amp;quot; : &amp;quot;菜鸟教程&amp;quot;,&lt;br /&gt;
    &amp;quot;url&amp;quot; : &amp;quot;https://www.runoob.com&amp;quot;     // 已修改为 https&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
示例 2：更新所有符合条的文档数据&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
var MongoClient = require('mongodb').MongoClient;&lt;br /&gt;
var url = &amp;quot;mongodb://localhost:27017/&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
MongoClient.connect(url, function(err, db) {&lt;br /&gt;
    if (err) throw err;&lt;br /&gt;
    var dbo = db.db(&amp;quot;runoob&amp;quot;);&lt;br /&gt;
    var whereStr = {&amp;quot;type&amp;quot;:'en'};  // 查询条件&lt;br /&gt;
    var updateStr = {$set: { &amp;quot;url&amp;quot; : &amp;quot;https://www.runoob.com&amp;quot; }};&lt;br /&gt;
    dbo.collection(&amp;quot;site&amp;quot;).updateMany(whereStr, updateStr, function(err, res) {&lt;br /&gt;
        if (err) throw err;&lt;br /&gt;
        console.log(res.result.nModified + &amp;quot; 条文档被更新&amp;quot;);&lt;br /&gt;
        db.close();&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
其中：result.nModified 为更新的条数。&lt;br /&gt;
&lt;br /&gt;
=== 删除数据 ===&lt;br /&gt;
# '''deleteOne()'''：删除单条文档数据；&lt;br /&gt;
# '''deleteMany()'''：删除所有符合条的文档数据；&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
示例 1：将 name 为 &amp;quot;菜鸟教程&amp;quot; 的数据删除&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
var MongoClient = require('mongodb').MongoClient;&lt;br /&gt;
var url = &amp;quot;mongodb://localhost:27017/&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
MongoClient.connect(url, function(err, db) {&lt;br /&gt;
    if (err) throw err;&lt;br /&gt;
    var dbo = db.db(&amp;quot;runoob&amp;quot;);&lt;br /&gt;
    var whereStr = {&amp;quot;name&amp;quot;:'菜鸟教程'};  // 查询条件&lt;br /&gt;
    dbo.collection(&amp;quot;site&amp;quot;).deleteOne(whereStr, function(err, obj) {&lt;br /&gt;
        if (err) throw err;&lt;br /&gt;
        console.log(&amp;quot;文档删除成功&amp;quot;);&lt;br /&gt;
        db.close();&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
进入 mongo 管理工具查看数据已删除：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt; db.site.find()&lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
示例 2：将 type 为 en 的所有数据删除&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
var MongoClient = require('mongodb').MongoClient;&lt;br /&gt;
var url = &amp;quot;mongodb://localhost:27017/&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
MongoClient.connect(url, function(err, db) {&lt;br /&gt;
    if (err) throw err;&lt;br /&gt;
    var dbo = db.db(&amp;quot;runoob&amp;quot;);&lt;br /&gt;
    var whereStr = { type: &amp;quot;en&amp;quot; };  // 查询条件&lt;br /&gt;
    dbo.collection(&amp;quot;site&amp;quot;).deleteMany(whereStr, function(err, obj) {&lt;br /&gt;
        if (err) throw err;&lt;br /&gt;
        console.log(obj.result.n + &amp;quot; 条文档被删除&amp;quot;);&lt;br /&gt;
        db.close();&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
其中：obj.result.n 为删除的条数。&lt;br /&gt;
&lt;br /&gt;
=== 排序 ===&lt;br /&gt;
排序使用 '''sort()''' 方法，该方法接受一个参数，规定是升序/降序：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
{ type: 1 }  // 按 type 字段升序&lt;br /&gt;
{ type: -1 } // 按 type 字段降序&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
示例：按 type 升序排列&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
var MongoClient = require('mongodb').MongoClient;&lt;br /&gt;
var url = &amp;quot;mongodb://localhost:27017/&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
MongoClient.connect(url, function(err, db) {&lt;br /&gt;
    if (err) throw err;&lt;br /&gt;
    var dbo = db.db(&amp;quot;runoob&amp;quot;);&lt;br /&gt;
    var mysort = { type: 1 };&lt;br /&gt;
    dbo.collection(&amp;quot;site&amp;quot;).find().sort(mysort).toArray(function(err, result) {&lt;br /&gt;
        if (err) throw err;&lt;br /&gt;
        console.log(result);&lt;br /&gt;
        db.close();&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 查询分页 ===&lt;br /&gt;
# '''limit()'''方法：设置指定的返回条数，该方法只接受一个参数，指定了返回的条数；&lt;br /&gt;
# '''skip()'''方法：指定跳过的条数；&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
示例 1：读取两条数据&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
var MongoClient = require('mongodb').MongoClient;&lt;br /&gt;
var url = &amp;quot;mongodb://localhost:27017/&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
MongoClient.connect(url, function(err, db) {&lt;br /&gt;
    if (err) throw err;&lt;br /&gt;
    var dbo = db.db(&amp;quot;runoob&amp;quot;);&lt;br /&gt;
    dbo.collection(&amp;quot;site&amp;quot;).find().limit(2).toArray(function(err, result) {&lt;br /&gt;
        if (err) throw err;&lt;br /&gt;
        console.log(result);&lt;br /&gt;
        db.close();&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
示例 2：跳过前面两条数据，读取两条数据&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
var MongoClient = require('mongodb').MongoClient;&lt;br /&gt;
var url = &amp;quot;mongodb://localhost:27017/&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
MongoClient.connect(url, function(err, db) {&lt;br /&gt;
    if (err) throw err;&lt;br /&gt;
    var dbo = db.db(&amp;quot;runoob&amp;quot;);&lt;br /&gt;
    dbo.collection(&amp;quot;site&amp;quot;).find().skip(2).limit(2).toArray(function(err, result) {&lt;br /&gt;
        if (err) throw err;&lt;br /&gt;
        console.log(result);&lt;br /&gt;
        db.close();&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 连接操作 ===&lt;br /&gt;
mongoDB 不是一个关系型数据库，但我们可以使用 '''$lookup''' 来实现'''左连接'''。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
示例：例如我们有两个集合数据分别为：&lt;br /&gt;
集合1：orders&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  { _id: 1, product_id: 154, status: 1 }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
集合2：products&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  { _id: 154, name: '笔记本电脑' },&lt;br /&gt;
  { _id: 155, name: '耳机' },&lt;br /&gt;
  { _id: 156, name: '台式电脑' }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
实现左连接：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
var MongoClient = require('mongodb').MongoClient;&lt;br /&gt;
var url = &amp;quot;mongodb://127.0.0.1:27017/&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
MongoClient.connect(url, function(err, db) {&lt;br /&gt;
  if (err) throw err;&lt;br /&gt;
  var dbo = db.db(&amp;quot;runoob&amp;quot;);&lt;br /&gt;
  dbo.collection('orders').aggregate([&lt;br /&gt;
    { $lookup:&lt;br /&gt;
       {&lt;br /&gt;
         from: 'products',            // 右集合&lt;br /&gt;
         localField: 'product_id',    // 左集合 join 字段&lt;br /&gt;
         foreignField: '_id',         // 右集合 join 字段&lt;br /&gt;
         as: 'orderdetails'           // 新生成字段（类型array）&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
    ]).toArray(function(err, res) {&lt;br /&gt;
    if (err) throw err;&lt;br /&gt;
    console.log(JSON.stringify(res));&lt;br /&gt;
    db.close();&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 删除集合 ===&lt;br /&gt;
'''drop()''' 方法删除集合。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
示例：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
var MongoClient = require('mongodb').MongoClient;&lt;br /&gt;
var url = &amp;quot;mongodb://localhost:27017/&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
MongoClient.connect(url, function(err, db) {&lt;br /&gt;
    if (err) throw err;&lt;br /&gt;
    var dbo = db.db(&amp;quot;runoob&amp;quot;);&lt;br /&gt;
    // 删除 test 集合&lt;br /&gt;
    dbo.collection(&amp;quot;test&amp;quot;).drop(function(err, delOK) {  // 执行成功 delOK 返回 true，否则返回 false&lt;br /&gt;
        if (err) throw err;&lt;br /&gt;
        if (delOK) console.log(&amp;quot;集合已删除&amp;quot;);&lt;br /&gt;
        db.close();&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 使用 Promise ==&lt;br /&gt;
'''Promise''' 是一个 ECMAScript 6 提供的类，目的是更加优雅地'''书写复杂的异步任务'''。&lt;br /&gt;
&lt;br /&gt;
* 参考：[https://www.runoob.com/js/js-promise.html JavaScript Promise]。&lt;br /&gt;
&lt;br /&gt;
=== Promise 创建集合 ===&lt;br /&gt;
示例：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
const MongoClient = require(&amp;quot;mongodb&amp;quot;).MongoClient;&lt;br /&gt;
const url = &amp;quot;mongodb://localhost/runoob&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
MongoClient.connect(url).then((conn) =&amp;gt; {&lt;br /&gt;
    console.log(&amp;quot;数据库已连接&amp;quot;);&lt;br /&gt;
    var dbase = conn.db(&amp;quot;runoob&amp;quot;);&lt;br /&gt;
    dbase.createCollection(&amp;quot;site&amp;quot;).then((res) =&amp;gt; {&lt;br /&gt;
        console.log(&amp;quot;已创建集合&amp;quot;);&lt;br /&gt;
    }).catch((err) =&amp;gt; {&lt;br /&gt;
        console.log(&amp;quot;数据库操作错误&amp;quot;);&lt;br /&gt;
    }).finally(() =&amp;gt; {&lt;br /&gt;
        conn.close();&lt;br /&gt;
    });&lt;br /&gt;
}).catch((err) =&amp;gt; {&lt;br /&gt;
    console.log(&amp;quot;数据库连接失败&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Promise 数据操作 ===&lt;br /&gt;
示例：在一个程序中实现四个连续操作：增加 、查询 、更改 、删除。&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
const MongoClient = require(&amp;quot;mongodb&amp;quot;).MongoClient;&lt;br /&gt;
const url = &amp;quot;mongodb://localhost/&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
MongoClient.connect(url).then((conn) =&amp;gt; {&lt;br /&gt;
    console.log(&amp;quot;数据库已连接&amp;quot;);&lt;br /&gt;
    const test = conn.db(&amp;quot;testdb&amp;quot;).collection(&amp;quot;test&amp;quot;);&lt;br /&gt;
    // 增加&lt;br /&gt;
    test.insertOne({ &amp;quot;site&amp;quot;: &amp;quot;runoob.com&amp;quot; }).then((res) =&amp;gt; {&lt;br /&gt;
        // 查询&lt;br /&gt;
        return test.find().toArray().then((arr) =&amp;gt; {&lt;br /&gt;
            console.log(arr);&lt;br /&gt;
        });&lt;br /&gt;
    }).then(() =&amp;gt; {&lt;br /&gt;
        // 更改&lt;br /&gt;
        return test.updateMany({ &amp;quot;site&amp;quot;: &amp;quot;runoob.com&amp;quot; },&lt;br /&gt;
            { $set: { &amp;quot;site&amp;quot;: &amp;quot;example.com&amp;quot; } });&lt;br /&gt;
    }).then((res) =&amp;gt; {&lt;br /&gt;
        // 查询&lt;br /&gt;
        return test.find().toArray().then((arr) =&amp;gt; {&lt;br /&gt;
            console.log(arr);&lt;br /&gt;
        });&lt;br /&gt;
    }).then(() =&amp;gt; {&lt;br /&gt;
        // 删除&lt;br /&gt;
        return test.deleteMany({ &amp;quot;site&amp;quot;: &amp;quot;example.com&amp;quot; });&lt;br /&gt;
    }).then((res) =&amp;gt; {&lt;br /&gt;
        // 查询&lt;br /&gt;
        return test.find().toArray().then((arr) =&amp;gt; {&lt;br /&gt;
            console.log(arr);&lt;br /&gt;
        });&lt;br /&gt;
    }).catch((err) =&amp;gt; {&lt;br /&gt;
        console.log(&amp;quot;数据操作失败&amp;quot; + err.message);&lt;br /&gt;
    }).finally(() =&amp;gt; {&lt;br /&gt;
        conn.close();&lt;br /&gt;
    });&lt;br /&gt;
}).catch((err) =&amp;gt; {&lt;br /&gt;
    console.log(&amp;quot;数据库连接失败&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
进入 mongo 管理工具查看数据：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
数据库已连接&lt;br /&gt;
[ { _id: 5f1664966833e531d83d3ac6, site: 'runoob.com' } ]&lt;br /&gt;
[ { _id: 5f1664966833e531d83d3ac6, site: 'example.com' } ]&lt;br /&gt;
[]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
用异步函数实现相同的数据操作：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
const MongoClient = require(&amp;quot;mongodb&amp;quot;).MongoClient;&lt;br /&gt;
const url = &amp;quot;mongodb://localhost/&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
async function dataOperate() {&lt;br /&gt;
    var conn = null;&lt;br /&gt;
    try {&lt;br /&gt;
        conn = await MongoClient.connect(url);&lt;br /&gt;
        console.log(&amp;quot;数据库已连接&amp;quot;);&lt;br /&gt;
        const test = conn.db(&amp;quot;testdb&amp;quot;).collection(&amp;quot;test&amp;quot;);&lt;br /&gt;
        // 增加&lt;br /&gt;
        await test.insertOne({ &amp;quot;site&amp;quot;: &amp;quot;runoob.com&amp;quot; });&lt;br /&gt;
        // 查询&lt;br /&gt;
        var arr = await test.find().toArray();&lt;br /&gt;
        console.log(arr);&lt;br /&gt;
        // 更改&lt;br /&gt;
        await test.updateMany({ &amp;quot;site&amp;quot;: &amp;quot;runoob.com&amp;quot; },&lt;br /&gt;
            { $set: { &amp;quot;site&amp;quot;: &amp;quot;example.com&amp;quot; } });&lt;br /&gt;
        // 查询&lt;br /&gt;
        arr = await test.find().toArray();&lt;br /&gt;
        console.log(arr);&lt;br /&gt;
        // 删除&lt;br /&gt;
        await test.deleteMany({ &amp;quot;site&amp;quot;: &amp;quot;example.com&amp;quot; });&lt;br /&gt;
        // 查询&lt;br /&gt;
        arr = await test.find().toArray();&lt;br /&gt;
        console.log(arr);&lt;br /&gt;
    } catch (err) {&lt;br /&gt;
        console.log(&amp;quot;错误：&amp;quot; + err.message);&lt;br /&gt;
    } finally {&lt;br /&gt;
        if (conn != null) conn.close();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
dataOperate();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
进入 mongo 管理工具查看数据：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
数据库已连接&lt;br /&gt;
[ { _id: 5f169006a2780f0cd4ea640b, site: 'runoob.com' } ]&lt;br /&gt;
[ { _id: 5f169006a2780f0cd4ea640b, site: 'example.com' } ]&lt;br /&gt;
[]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
运行结果完全一样。&lt;br /&gt;
&lt;br /&gt;
很显然，异步函数是一种非常良好的编程风格，在多次使用异步操作的时候非常实用。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 但是请勿在低于 7.6.0 版本的 node.js 上使用异步函数。&lt;/div&gt;</summary>
		<author><name>Eijux</name></author>
	</entry>
</feed>