博客网址:www.shicoder.top
微信:kj11011029
欢迎加群聊天 :452380935
这次我们开始我们的MongoDB之旅吧
启动和连接MongoDB
- 启动,一般以配置文件启动
> mongod.exe -f ./mongod.conf
最简单的一个config文件就是配置一个存储数据的路径和日志文件
storage:
#The directory where the mongod instance stores its data.Default Value is "\data\db" on Windows.
dbPath: D:\mongodb-win32-x86_64-2008plus-ssl-4.0.12\data
systemLog:
destination: file
path: D:\mongodb-win32-x86_64-2008plus-ssl-4.0.12\logs\mongodb.log
- 连接,采用mongo
> mongo.exe
常见命令
- 选择和创建数据库,不存在则自动创建
use 数据库名称
- 集合的删除(集合类似表、文档就是一个个json)
db.集合.drop
- 文档增删改查
db.集合.insert(
<document>,
{
writeConcern: <document>,
ordered: <boolean>
}
)
db.集合.insertmany(
[<document1>,<document1>,...]
{
writeConcern: <document>,
ordered: <boolean>
}
)
db.集合.find({query},{projection})
第一个{}为where条件,第二个{}为显示的字段(0表示不显示 1表示显示)
1、简单的等于
select name, age, skills from users where name = ‘hurry’;
db.users.find({'name' : 'hurry'},{'name': 1, 'age' : 1, 'skills' : 1});
2、使用and
select name, age, skills from users where name = ‘hurry’ and age = 18;
db.users.find({'name' : 'hurry', 'age' : 18},{'name' : 1, 'age' : 1, 'skills' : 1});
3、使用or
select name, age, skills from users where name = ‘hurry’ or age = 18;
db.users.find({ '$or' : [{'name' : 'hurry'}, {'age' : 18}] },{'name' : 1, 'age' : 1, 'skills' : 1});
4、使用in, not in (nin)
select * from users where age in (10, 22, 26);
db.users.find({'age' : {'$in' : [10, 22, 26]}});
select * from users where age not in (10, 22, 26);
db.users.find({'age':{$nin:["1003","1004"]}})
5、<,<=,>,>=
db.集合.find({ "field" : { $gt: value }}) // 大于: field > value
db.集合.find({ "field" : { $lt: value }}) // 小于: field < value
db.集合.find({ "field" : { $gte: value }}) // 大于等于: field >= value
db.集合.find({ "field" : { $lte: value }}) // 小于等于: field <= value
db.集合.find({ "field" : { $ne: value }}) // 不等于: field != value
查询所有 db.集合.find() 或 db.集合.find({})
查询特定 db.集合.find({userid:'1003'})
返回第一条数据 db.集合.findOne({userid:'1003'})
db.集合.remove({}) 全部删除
db.集合.remove({'userid':'1003'})
- 文档更新
db.集合.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.insert({
title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # 输出信息
> db.col.find().pretty()
{
"_id" : ObjectId("56064f89ade2f21f36b03136"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
>
- 文档统计查询
统计集合所有的记录数
db.集合.count()
统计userid为1003的记录数
db.集合.count({'userid':'1003'})
返回topN
db.集合.find().limit(N)
前N个不要
db.集合.find().skip(N)
- 排序
1为升序、2为降序
db.集合.find().sort({userid:-1,count:1}) 对userid降序,count升序
注意:skip、limit、sort在一起的时候,按照sort、skip、limit顺序,和代码编写顺序无关
索引
MongoDB使用B-Tree、Mysql使用B+ Tree
默认 _id 升序索引
1为按升序创建索引,-1为降序
db.集合.createIndex({'title':1})
db.集合.createIndex({"title":1,"description":-1})
得到索引
db.集合.getIndexes()
删除索引
删除集合中userid字段上的升序索引
db.集合.dropIndex({userid:1})
覆盖查询
当同时满足以下两个条件时,索引将涵盖查询
- 所有查询的字段是索引的一部分;
- 所有返回的字段位于同一索引中。
db.test.insert(
{
"_id": ObjectId("53402597d852426020000002"),
"contact": "987654321",
"dob": "01-01-1991",
"gender": "M",
"name": "Tom Benzamin",
"user_name": "tombenzamin"
})
db.users.createIndex({gender:1,user_name:1})
db.users.find({gender:"M"},{user_name:1,_id:0}) 查询不会被覆盖 _id在查询中会默认返回
db.users.find({gender:"M"},{user_name:1}) 查询会被覆盖
评论 (0)