一. 插入并保存文档
插入文档命令:数据库.集合名称.insert( 插入的文档名称 )
查看集合数据:数据库.集合名称.find( )
注意:
- 不需要预先创建一个集合,在第一次插入数据时会自动创建;
- 每次插入一个集合时都会有一个ID,名为 _id;
- 插入文档大小超过命令 Object.bsonsize(doc) 的限制时,不能存到数据库中;
- MongoDB在插入时不会执行代码,所以传统的注入式攻击对其无效;
- MongoDB支持批量插入操作,而且速度更快,只发送一个TCP请求;
二. 删除文档
删除文档命令:数据库.集合名称.remove( 删除的文档名称 )
注意:
- 如果不加文档名称,表示删除集合中的所有文档,但不会删除集合本身,索引也会保留,删除数据不能恢复;
- 可以使用命令:数据库.集合名称.drop( ) 删除整个集合,速度比remove快得多,但要重新建立集合,重新建立索引
三. 修改文档
① 使用update命令:数据库.集合名称.update( 新文档名称, 旧文档名称 )
② 使用修改器修改:可以操作数组或者内嵌文档
1. " $set "修改器:
用来指定一个键的值,如果键不存在则自动创建它;甚至可以修改数据类型都没有问题,数组型:[ " 816 Park Street " , " 826 Park Street " ]
> db.personalinfo.update( { " id " : ObjectId( "4f661cd4618a714de9afce33" ) } , { " $set " : { " address " : " 816 Park Street " } } )
2. " $unset "将键完全删除,代码将上面的后部改为:" $unset " : { " address " : 1 } 即可
3. " $inc "修改器:
用来增加已有的键的值,不存在则自动创建,对于分析数据,网站访问量特别方便,当键的值存在时,再用inc会在原有的基础上增加
键的值,而不会替换;用法和set相似,就不再赘述了;
注意:$inc只能操作键的值为数字。其他的类型会报错;
4. 数组修改器:
" $push " :操作指定的键,存在则在数组后加一个元素,不存在则新建数组,写法仍然用update, $push不再需要双引号即可,不再赘述
" $ne ":判断值在不在数组中,如果不在则添加进去,不再赘述
" $addToSet ":和$ne的功能一样,但需要双引号,和$each的组合可以实现一次添加多个值:
> db.personalinfo.update( { " id " : ObjectId( "4f661cd4618a714de9afce33" ) } , { " $addToSet " :
{ " emails " : { " $each " : [" zhangsan@163.com", " zhangsan@yahoo.com " ] } } } )
" $pop ":可以从数组中的任何一段删除元素;{ " $pop " : { "emails" : 1 } } 从数组末尾删除一个元素,{ "$pop" : { " emails " : -1 } } 从开头删除一个
“ $pull ”:将所有匹配的元素都删除
5. 数组定位修改器:
数组下标以0开头,直接作为键来定位元素
> db.personalinfo.update( { " id " : ObjectId( "4f661cd4618a714de9afce33" ) } , { " $set " : { " address.0 " : " 816 Park Street " } } )
上式用address.0来定位第一个元素
> db.personalinfo.update( { " id " : ObjectId( "4f661cd4618a714de9afce33" ) } , { " $set " : { " address.$.street" : " 816 Park Street " } } )
上式用" $ "定位文档已经匹配的元素并更新
6. upsert更新:
在使用update时,不设置第三个参数为true,在查询不到要更新的文档时,不作任何操作,如果设置第三个参数为true,会在没有找到
文档的情况下新建一个文档。这种更新操作非常有用
7. save( )函数:
和insert操作功能类似,用法类似,不同的是,当插入的文档的键值相同,insert会报错,而save会进行更新操作
8. 修改多个文档:
update的第四个参数为true则修改多个匹配的文档的匹配键值,返回的参数updateExisting为true表示有更新,n表示更新了几个文档
9. 修改并返回修改后的文档:
findAndModify函数,再次不再赘述,有兴趣可以自行百度