MongoDB基础知识练习备注

参考“”菜鸟教程“”而练习的MongoDB知识,
菜鸟教程链接!

打开cmd控制台(在MongoDB文件的bin下,cmd运行mongo):
D:\MongoDB\Service\4.4\bin>mongo

1、MongoDB创建数据库:
CMD命令:
创建数据库:use DATABASE_NAME。 如果数据库不存在,则创建数据库,否则切换到指定数据库。
显示当前数据库:db
查看所有数据库:show dbs
插入数据:db.DATABASE_NAME.insert({“name”:菜鸟教程"})
注意: 在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。

2、MongoDB删除数据库
CMD命令:
切换到当前数据库:use DATABASE_NAME
删除当前数据库:db.dropDatabase()

3、MongoDB创建集合、删除集合
(1)创建集合
db.createCollection(name, options)
参数说明:
name: 要创建的集合名称
options: 可选参数, 指定有关内存大小及索引的选项
(2)删除集合
db.collection.drop()
参数说明:

创建集合:db.createCollection(COLLECTION_NAME)
删除集合collection_name:db.COLLECTION_NAME.drop()

例子:
> use runoob
switched to db runoob
> db.createCollection("runoob")     # 先创建集合,类似数据库中的表
> show tables             			# show collections 命令会更加准确点
runoob
> db.runoob.drop()					#删除集合名为runoob的集合(不是数据库名)
true
> show tables

注意:
在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。
> db.mycol2.insert({"name" : "菜鸟教程"})
> show collections
mycol2
...

4、MongoDB插入文档
(1)db.COLLECTION_NAME.insert()
(2)db.COLLECTION_NAME.save()
#如果不指定_id字段,save()方法类似于insert();如果指定_id字段,则会更新该_id的数据。

实例1:插入文档
>db.col.insert({title: 'MongoDB 教程', 
	description: 'MongoDB 是一个 Nosql 数据库',
	by: '菜鸟教程',
	url: 'http://www.runoob.com',
	tags: ['mongodb', 'database', 'NoSQL'],
	likes: 100
})

查看该集合下的文档:
db.COLLECTION_NAME.find()
db.COLLECTION_NAME.find().pretty()		#cmd情况下,会格式化输出

实例2:将数据定义为一个变量,在插入此文档
> document=({title: 'MongoDB 教程', 
	description: 'MongoDB 是一个 Nosql 数据库',
	by: '菜鸟教程',
	url: 'http://www.runoob.com',
	tags: ['mongodb', 'database', 'NoSQL'],
	likes: 100
});
> db.col.insert(document)

插入一个新文档:db.COLLECTION_NAME.insertOne()
插入多个文档:db.COLLECTION_NAME.insertMany()

实例:
> documents = [{title:'MongoDB 教程', description:'MongoDB 是一个Nosql数据库', by: 	'菜鸟教程', url:'http://www.runoob.com', tags:['mongodb','database','Nosql'], likes:100 },{name:'JRWang',firstName:'Wang',lastName:'JR'}]
[
		{
				"title" : "MongoDB 教程",
				"description" : "MongoDB 是一个Nosql数据库",
				"by" : "菜鸟教程",
				"url" : "http://www.runoob.com",
				"tags" : [
						"mongodb",
						"database",
						"Nosql"
				],
				"likes" : 100
		},
		{
				"name" : "JRWang",
				"firstName" : "Wang",
				"lastName" : "JR"
		}
]
> db.col.insertMany(documents)
{                                                                                       	tName:'JR'}]
		"acknowledged" : true,
		"insertedIds" : [
				ObjectId("5f8a493aac6c84405107c26f"),
				ObjectId("5f8a493aac6c84405107c270")
		]
}

5、MangoDB更新文档
(1)update()方法
update() 方法用于更新已存在的文档。语法格式如下:

db.collection.update(
<query>,
<update>,
{
	upsert: <boolean>,
	multi: <boolean>,
	writeConcern: <document>
}
)
参数说明:

query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。

实例:
db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})

(2)save()方法
	save() 方法通过传入的文档来替换已有文档,_id 主键存在就更新,不存在就插入。
	
> curdocument = { "_id" : ObjectId("5f8a55d7ac6c84405107c276"), "title" : "MongoDB xx", "description" : "MongoDB 是一个Nosql数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "Nosql" ], "likes" : 100 }                                                                                       
> db.col.save(curdocument)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

实例:
只更新第一条记录:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );

全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );

只添加第一条:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );

全部添加进去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );

全部更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );

只更新第一条记录:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );

6、删除文档
(1)MongoDB remove()函数是用来移除集合中的数据。
remove() 方法的基本语法格式如下所示:

db.collection.remove(
	<query>,
	{
		justOne: <boolean>,
		writeConcern: <document>
	}
)
参数说明:

query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
writeConcern :(可选)抛出异常的级别。

实例:
#移除title为'MongoDB 教程'的文档
> db.col.remove({'title':'MongoDB 教程'})
WriteResult({ "nRemoved" : 2 })

#删除第一条找到的记录可以设置 justOne 为 1
> db.col.remove({'title':'MongoDB 教程'},1)
WriteResult({ "nRemoved" : 1 })

#删除全部数据
> db.col.remove({})

(2)deleteOne()和deleteMany()方法
如删除集合下全部文档:
db.inventory.deleteMany({})

删除 status 等于 A 的全部文档:
db.inventory.deleteMany({ status : "A" })

删除 status 等于 D 的一个文档:
db.inventory.deleteOne( { status: "D" } )

7、MongoDB 查询文档
MongoDB 查询文档使用 find() 方法。
find() 方法以非结构化的方式来显示所有文档。

语法
MongoDB 查询数据的语法格式如下:

db.collection.find(query, projection)
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
>db.col.find().pretty()

如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
>db.col.find().pretty()
pretty() 方法以格式化的方式来显示所有文档。

(1) MongoDB 条件操作符查询文档(等于、小于、小于等于.....)
等于	{<key>:<value>}
小于	{<key>:{$lt:<value>}}
小于或等于	{<key>:{$lte:<value>}}
大于	{<key>:{$gt:<value>}}
大于或等于	{<key>:{$gte:<value>}}
不等于	{<key>:{$ne:<value>}}
(2)MongoDB AND 条件
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。

语法格式如下:

>db.col.find({key1:value1, key2:value2}).pretty()
实例:> db.col.find({"by":"菜鸟教程", "title":"MongoDB 教程"}).pretty()	#可省略key的引号

(3)MongoDB OR条件
>db.col.find(
	{
		$or: [
		{key1: value1}, {key2:value2}
	]
	}
).pretty()

实例:
>db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()

(4)AND 和 OR联合使用
以下实例演示了 AND 和 OR 联合使用,类似常规 SQL 语句为: 'where likes>50 AND (by = '菜鸟教程' OR title = 'MongoDB 教程')'
>db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()

8、MongoDB 条件操作符
MongoDB中条件操作符有:

(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte

(1)MongoDB (>) 大于操作符 - $gt
#获取 "col" 集合中 "likes" 大于 100 的数据
db.col.find({likes : {$gt : 100}})
(2)MongoDB(>=)大于等于操作符 - $gte
#获取"col"集合中 "likes" 大于等于 100 的数据
db.col.find({likes : {$gte : 100}})
(3)MongoDB(>=)大于等于操作符 - $gte
#获取"col"集合中 "likes" 大于等于 100 的数据
db.col.find({likes : {$gte : 100}})
(4)MongoDB (<) 小于操作符 - $lt
#获取"col"集合中 "likes" 小于 150 的数据
db.col.find({likes : {$lt : 150}})
(5)MongoDB (<=) 小于等于操作符 - $lte
#获取"col"集合中 "likes" 小于等于 150 的数据
db.col.find({likes : {$lte : 150}})
(6)MongoDB 使用 (<) 和 (>) 查询 - $lt 和 $gt
#获取"col"集合中 "likes" 大于100,小于 200 的数据
db.col.find({likes : {$lt :200, $gt : 100}})

9、MongoDB 操作符
$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
Double 1
String 2
Object 3
Array 4
Binary data 5
Undefined 6 已废弃。
Object id 7
Boolean 8
Date 9
Null 10
Regular Expression 11
JavaScript 13
Symbol 14
JavaScript (with scope) 15
32-bit integer 16
Timestamp 17
64-bit integer 18
Min key 255 Query with -1.
Max key 127

实例:获取 "col" 集合中 title 为 String 的数据
db.col.find({"title" : {$type : 2}})
或
db.col.find({"title" : {$type : 'string'}})
类型	数字	备注

10、MongoDB limit()和skip()
(1)limit()
在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
语法:
limit()方法基本语法如下所示:
>db.COLLECTION_NAME.find().limit(NUMBER)

(2)skip()
使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。

语法
skip() 方法脚本语法格式如下:
>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

11、MongoDB 排序
MongoDb sort()方法:
在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

语法
sort()方法基本语法如下所示:
>db.COLLECTION_NAME.find().sort({KEY:1})

实例:
演示了 col 集合中的数据按字段 likes 的降序排列:
>db.col.find({},{"title":1,_id:0}).sort({"likes":-1})
{ "title" : "PHP 教程" }
{ "title" : "Java 教程" }
{ "title" : "MongoDB 教程" }
>

版权声明:本文为numberseven7原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。