MongoDB数据库基本操作
此总结来自菜鸟教程,如需更加详细或者其它分享请跳转菜鸟教程
1.插入文档
db.COLLECTION_NAME.insert(document)
或
db.COLLECTION_NAME.save(document)
3.2 版本之后新增了 db.collection.insertOne() 和 db.collection.insertMany()
2.更新文档
(1)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 :可选,抛出异常的级别。
(2)save() 方法
db.collection.save(
<document>,
{
writeConcern: <document>
}
)
参数说明:
- document : 文档数据。
- writeConcern :可选,抛出异常的级别。
3.删除文档
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
参数说明:
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
- writeConcern :(可选)抛出异常的级别。
4.查询文档
db.collection.find(query, projection)
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
以下collection简称col,数据库名称
(1)Where 语句
db.col.find({key:value}) //等于
db.col.find({key:{$lt:<value>}}) //小于 lte:小于等于 ge:大于 gte:大于等于 ne:不等于
eg1
db.col.find({_id: ObjectId("idValue")}) //查询主键Id
db.col.find({field: {$exists: true}}) //查询字段(field)是否存在
(2)And语句
db.col.find({key1:value1, key2:value2})
(3)Or语句
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
)
(4)And 和 Or语句
db.col.find({
key1: {$gt:<value>},
$or: [{key2: value2},{key3: value3}]
})
(5)分页Limit与跳过Skip方法
db.COLLECTION_NAME.find().limit(NUMBER)
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
如果没有指定limit()方法中的参数则显示集合中的所有数据。skip()方法默认参数为 0 。
(6)排序sort方法
db.COLLECTION_NAME.find().sort({KEY:<1或者-1>})
1 为升序排列,-1 是降序排列
5.索引
(1)创建索引
db.collection.createIndex({keys, <1或者-1>})
keys只可以创建多个索引字段,1 为指定按升序创建索引, -1 为降序来创建索引。
参数 | 类型 | 详情 |
---|---|---|
background | Boolean | 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为false |
db.collection.createIndex({key1: 1, key2: 1}, {background: true})//创建工作在后台执行
1、查看集合索引
db.col.getIndexes()
2、查看集合索引大小
db.col.totalIndexSize()
3、删除集合所有索引
db.col.dropIndexes()
4、删除集合指定索引
db.col.dropIndex("索引名称")
6.聚合
聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。
db.col.aggregate(AGGREGATE_OPERATION)
表达式 | 描述 | 实例 |
---|---|---|
$sum | 计算总和。 | db.col.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { s u m : " sum : " sum:"likes"}}}]) |
$avg | 计算平均值 | db.col.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { a v g : " avg : " avg:"likes"}}}]) |
$min | 获取集合中所有文档对应值得最小值。 | db.col.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { m i n : " min : " min:"likes"}}}]) |
$max | 获取集合中所有文档对应值得最大值。 | db.col.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { m a x : " max : " max:"likes"}}}]) |
$push | 将值加入一个数组中,不会判断是否有重复的值。 | db.col.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", url : { p u s h : " push: " push:"url"}}}]) |
$addToSet | 将值加入一个数组中,会判断是否有重复的值,若相同的值在数组中已经存在了,则不加入。 | db.col.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", url : { a d d T o S e t : " addToSet : " addToSet:"url"}}}]) |
$first | 根据资源文档的排序获取第一个文档数据。 | db.col.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", first_url : { f i r s t : " first : " first:"url"}}}]) |
$last | 根据资源文档的排序获取最后一个文档数据 | db.col.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", last_url : { l a s t : " last : " last:"url"}}}]) |
以上操作_id : "$by_user"是指user字段映射到_id字段。_id是默认显示 ,可指定字段不显示0不显示 1显示
聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
- $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
db.article.aggregate(
{ $project : {
title : 1 ,
author : 1 ,
}}
);//结果中就只还有_id,tilte和author三个字段,默认情况下_id字段是被包含的
- m a t c h :用于过滤数据,只输出符合条件的文档。 match:用于过滤数据,只输出符合条件的文档。 match:用于过滤数据,只输出符合条件的文档。match使用MongoDB的标准查询操作。
db.articles.aggregate( [
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );
- $limit:用来限制MongoDB聚合管道返回的文档数。
- $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
- $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
- $group:将集合中的文档分组,可用于统计结果。
- $sort:将输入文档排序后输出。
7.使用例子
展开详情文档,状态为1,价格为空
db.article.aggregate([
{
$unwind:"$details"
},
{
$match: {
"details.status": 1,
"details.price": {$exists: false}
}
}
]);
eg2
db.col.aggregate([
{$sort: {date: -1}},
{$skip: 10}, //跳过前10个文档
{$limit: 5}, //限制返回5个文档
//其他聚合操作
])