创建数据库语法
use DATABASE_NAME,如果数据库不存在,则会创建数据库,否则切换到指定数据库
查看所有数据库
show dbs,注意: 在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
删除数据库
db.dropDatabase()
db.createCollection(name, options),name️创建集合的名称,option指的是创建集合时的可选参数,指定有关内存大小及索引的选项。
db.createCollection(“mycol”, { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )
1、use test
2、db.createCollection(“xxx”)
show collections
在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。
db.collection.drop()
1、use mydb
2、db.mycol.drop()
MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:db.COLLECTION_NAME.insert(document) 或 db.COLLECTION_NAME.save(document)。
save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne() 或 db.collection.replaceOne() 来代替。
insert(): 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。
3.2 版本之后新增了 db.collection.insertOne() 和 db.collection.insertMany()。
db.collection.insertOne(
,
{
writeConcern:
}
)
db.collection.insertMany(
[ , , ... ],
{
writeConcern: ,
ordered:
}
)
document:要写入的文档。
writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
ordered:指定是否按顺序写入,默认 true,按顺序写入。
MongoDB 使用 update() 和 save() 方法来更新集合中的文档,update() 方法用于更新已存在的文档,save() 方法通过传入的文档来替换已有文档,_id 主键存在就更新,不存在就插入。
基本的语法如下:
db.collection.update(
,
,
{
upsert: ,
multi: ,
writeConcern:
}
)
db.collection.save(
,
{
writeConcern:
}
)
db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
db.col.save({
"_id" : ObjectId("56064f89ade2f21f36b03136"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Runoob",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"NoSQL"
],
"likes" : 110
})
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如 , , ,inc…)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。
MongoDB remove() 函数是用来移除集合中的数据。
基本用法:
db.collection.remove(
,
)
如果你的 MongoDB 是 2.6 版本以后的,语法格式如下:
db.collection.remove(
,
{
justOne: ,
writeConcern:
}
)
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
writeConcern :(可选)抛出异常的级别。
删除案例:
db.col.remove({'title':'MongoDB 教程'})
WriteResult({ "nRemoved" : 2 })
如果你只想删除第一条找到的记录可以设置 justOne 为 1
db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)
删除所有
db.col.remove({})
find() 方法以非结构化的方式来显示所有文档。除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。
基本语法:
db.collection.find(query, projection)
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:db.col.find().pretty()
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。
格式如下:db.col.find({key1:value1, key2:value2}).pretty()
格式如下:db.col.find({$or: [{key1: value1}, {key2:value2}]}).pretty()
db.col.find({“likes”: {$gt:50}, $or: [{“by”: “菜鸟教程”},{“title”: “MongoDB 教程”}]}).pretty()
如果你想获取 “col” 集合中 “likes” 大于 100 的数据:db.col.find({likes : {$gt : 100}})
如果你想获取"col"集合中 “likes” 大于等于 100 的数据:db.col.find({likes : {$gte : 100}})
如果你想获取"col"集合中 “likes” 小于 150 的数据:db.col.find({likes : {$lt : 150}})
如果你想获取"col"集合中 “likes” 小于等于 150 的数据:db.col.find({likes : {$lte : 150}})
如果你想获取"col"集合中 “likes” 大于100,小于 200 的数据:db.col.find({likes : {$lt :200, $gt : 100}})
格式如下:db.col.find({“title” : {$type : ‘string’}})
如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
limit基本用法:db.COLLECTION_NAME.find().limit(NUMBER)
skip基本用法:db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
基本用法:db.COLLECTION_NAME.find().sort({KEY:1})
以下实例演示了 col 集合中的数据按字段 likes 的降序排列:db.col.find({},{“title”:1,_id:0}).sort({“likes”:-1})
索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。
这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构
MongoDB使用 createIndex() 方法来创建索引。
基本语法:db.collection.createIndex(keys, options)
语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可:db.col.createIndex({“title”:1})
在后台创建索引:db.values.createIndex({open: 1, close: 1}, {background: true}),通过在创建索引时加 background:true 的选项,让创建工作在后台执行。
MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果,有点类似 SQL 语句中的 count(*)。
基本语法:db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
等价于:select by_user, count(*) from mycol group by by_user
管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数,MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
1、$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
2、 m a t c h :用于过滤数据,只输出符合条件的文档。 match:用于过滤数据,只输出符合条件的文档。 match:用于过滤数据,只输出符合条件的文档。match使用MongoDB的标准查询操作。
3、$limit:用来限制MongoDB聚合管道返回的文档数。
4、$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
5、$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
6、$group:将集合中的文档分组,可用于统计结果。
7、$sort:将输入文档排序后输出。
8、$geoNear:输出接近某一地理位置的有序文档。
$project实际案例
db.article.aggregate(
{ $project : {
title : 1 ,
author : 1 ,
}}
);
db.article.aggregate(
{ $project : {
_id : 0 ,
title : 1 ,
author : 1
}});
这样的话结果中就只还有_id,tilte和author三个字段了,默认情况下_id字段是被包含的,如果要想不包含_id话可以这样:
db.articles.aggregate( [
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );
$match实例
db.articles.aggregate( [
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );
$skip实例
db.article.aggregate(
{ $skip : 5 });