Mongo使用
要管理数据库,必须先开机,开机使用mongod --dbpath c:\mongo
管理数据库:mongo (一定要在新的cmd中输入)
常用命令:
> show dbs -- 查看数据库列表
> use admin --创建admin数据库,如果存在admin数据库则使用admin数据库
> db ---显示当前使用的数据库名称
> db.getName() ---显示当前使用的数据库名称
> db.dropDatabase() --删当前使用的数据库
> db.repairDatabase() --修复当前数据库
> db.version() --当前数据库版本
> db.getMongo() --查看当前数据库的链接机器地址
> db.stats() 显示当前数据库状态,包含数据库名称,集合个数,当前数据库大小 ...
> db.getCollectionNames() --查看数据库中有那些个集合(表)
> show collections --查看数据库中有那些个集合(表)
> db.person.drop() --删除当前集合(表)person
>cls --清屏
一、创建集合
语法格式:db.createCollection(name, options)
参数说明:
name: 要创建的集合名称
options: 可选参数, 指定有关内存大小及索引的选项
options 可以是如下参数:
字段 | 类型 | 描述 |
capped | 布尔 | (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合, 当达到最大值时,它会自动覆盖最早的文档。 |
autoIndexId | 布尔 | (可选)如为 true,自动在 _id 字段创建索引。默认为 false。 |
size | 数值 | (可选)为固定集合指定一个最大值(以字节计)。 |
max | 数值 | (可选)指定固定集合中包含文档的最大数量。 |
在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段
- 在 test 数据库中创建 lichtest集合
- 如果要查看已有集合,可以使用 show collections 命令:
下面是带有几个关键参数的 createCollection() 的用法:
创建固定集合 mycol,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个。
在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。
二、删除集合
语法格式:db.collection.drop()
参数说明:无
返回值:如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false
三、插入数据:insert()
MongoDB 使用 insert() 或 save() 方法向集合中插入文档,插入数据,随着数据的插入,数据库创建成功了,集合也创建成功了。
语法如下:db.COLLECTION_NAME.insert(document)
实例:
以上实例中 col 是我们的集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。
查看已插入文档:
我们也可以将数据定义为一个变量,如下所示:
插入文档你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。
MongoDB接入Javascrip风格语法,for,while,next,hasNext,forEach,toArray,findOne,limit
四、查找数据find()
MongoDB 查询数据的语法格式如下:
db.collection.find(query, projection)
参数:
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)
pretty() 方法以格式化的方式来显示所有文档
1.大于、小于、等于
如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:
操作 | 格式 | 范例 | RDBMS中的类似语句 |
等于 | {<key>:<value>} | db.col.find({"by":"菜鸟教程"}).pretty() | where by = '菜鸟教程' |
小于 | {<key>:{$lt:<value>}} | db.col.find({"likes":{$lt:50}}).pretty() | where likes < 50 |
小于或等于 | {<key>:{$lte:<value>}} | db.col.find({"likes":{$lte:50}}).pretty() | where likes <= 50 |
大于 | {<key>:{$gt:<value>}} | db.col.find({"likes":{$gt:50}}).pretty() | where likes > 50 |
大于或等于 | {<key>:{$gte:<value>}} | db.col.find({"likes":{$gte:50}}).pretty() | where likes >= 50 |
不等于 | {<key>:{$ne:<value>}} | db.col.find({"likes":{$ne:50}}).pretty() | where likes != 50 |
实例:db.student.find({"score.yuwen":{$gt:50}});
2. MongoDB AND 条件
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。
语法格式如下
db.col.find({key1:value1, key2:value2}).pretty()
实例:
以上实例中类似于 WHERE 语句:WHERE by='菜鸟教程' AND title='lich'
3. MongoDB OR 条件
MongoDB OR 条件语句使用了关键字 $or,语法格式如下:
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
实例:
4. AND 和 OR 联合使用
以下实例演示了 AND 和 OR 联合使用,类似常规 SQL 语句为: 'where likes>50 AND (by = '菜鸟教程' OR title = 'lich')'
5.循环用法
1、while:作为程序员应该都不陌生他是个循环。
2、hasNext: cursor集合遍历,是否还有数据。
3、printjson:输出集合中的文档
4、next:当前文档,并向下遍历
6.Sort
在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列
sort()方法基本语法如下所示
db.COLLECTION_NAME.find().sort({KEY:1})
实例:
注意:skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()
7.limit与skip
limit()方法基本语法如下所示
db.COLLECTION_NAME.find().limit(NUMBER)
实例:
skip() 方法脚本语法格式如下:
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
实例:
注:skip()方法默认参数为 0
五、修改数据: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 :可选,抛出异常的级别。
实例:
接着我们通过 update() 方法来更新标题(title)
以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。
六、Save()方法
save() 方法通过传入的文档来替换已有文档。语法格式如下
db.collection.save(
<document>,
{
writeConcern: <document>
}
)
参数说明:
document : 文档数据。
writeConcern :可选,抛出异常的级别
修改里面还有查询条件。你要该谁,要告诉mongo。
查找名字叫做小明的,把年龄更改为16岁:
1 db.student.update({"name":"小明"},{$set:{"age":16}}); |
查找数学成绩是70,把年龄更改为33岁:
1 db.student.update({"score.shuxue":70},{$set:{"age":33}}); |
完整替换,不出现$set关键字了:
1 db.student.update({"name":"小明"},{"name":"大明","age":16}); |
七、删除数据:remove()
remove() 方法的基本语法格式如下所示:
db.collection.remove(
<query>,
<justOne>
)
如果你的 MongoDB 是 2.6 版本以后的,语法格式如下:
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
参数说明:
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档。
writeConcern :(可选)抛出异常的级别。
如果你只想删除第一条找到的记录可以设置 justOne 为 1,如下所示:
db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)
实例:
db.restaurants.remove( { "title": "lich" }, { justOne: true } )
如果你想删除所有数据,可以使用以下方式(类似常规 SQL 的 truncate 命令)
db.col.remove({})
注:remove() 方法已经过时了,现在官方推荐使用 deleteOne() 和 deleteMany() 方法
如删除集合下全部文档:
db.inventory.deleteMany({})
删除 status 等于 A 的全部文档:
db.inventory.deleteMany({ status : "A" })
删除 status 等于 D 的一个文档:
db.inventory.deleteOne( { status: "D" } )
八、创建索引
createIndex()方法基本语法格式如下所示:
db.collection.createIndex(keys, options)
语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。
实例:
createIndex() 方法中你也可以设置使用多个字段创建索引(关系型数据库中称作复合索引)
实例: