插入并保存文档
db.foo.insert({文档});
插入insert最大的文档为16mb,如果查询一个稳定大小,可以用Object.bsonsize(文档名),单位为字节
批量增加,mongoimport命令行工具导入原始数据
查询文档
db.foo.find() 或者db.foo.find({}) 或者db.foo.findOne()或者 db.foo.findOne({})
删除文档
db.foo.remove({条件});可加入文档作为条件,如{"username":"aa"}
drop,不能指定条件,删除整个集合
更新文档
db.foo.update({条件},{文档});
使用修改器
$inc可以增加指定的值,用法:{"$inc":{"键":增加的个数}},如果字段不存在则创建。只能用于整型、长整型或双精度浮点型 db.foo.update({"username":"aa3"},{"$inc":{"bb":1}})
$set指定一个字段的值,如果字段不存在则创建,对于内嵌文档在使用$set更新时,使用"."连接的方式。
$unset删除键,{"$unset":{"要删除的字段":1}}),不论对目标键使用1、0、-1或者具体的字符串等都是可以删除该目标键
数组修改器
$push向已有的数组末尾加入一个元素(字段或者集合),要是没有就创建一个新的数组,不过滤重复的数据,要求键值类型必须是数组db.foo.update({"username":"aa4"},{"$push":{"bb":1}})
$each 可以通过push增加多个值
$slice 可以与push和each组合使用,保证数组不会超出设定好的最大长度,必须是负整数,保留最后的几个数据,可以$sort对数组中的所有对象进行排序,-1倒序,1正序
$lt,$lte,$gt,$gte,$ne分别表示<,<=,>,>=,!=
$addToSet可以避免插入重复,可与$each组合起来,添加多个不同的值
$pop从数组的头或者尾删除数组中的元素。1或者0从数组的尾部删除,-1从数组的头部删除
$pull从数组中删除满足条件的元素
数组的定位修改器,$.数字或者直接用$,如果为多个文档满足条件,则只更新第一个文档
修改器速度db.coll.stats()查看填充因子(addingFactor)
1、最初文档直接没有多余的空间
2、如果一个文档因为体积变大而不得不进行移动,它原先占用的空间就闲置了,而且填充因子会增加
3、之后插入的新文档都会拥有填充因子制定大小的增长空间,如果在之后的插入中不再发生文档移动,填充因子会逐渐变小
空白空间太多,系统会给提示,需要进行压缩
如果在进行插入和删除时会进行大量的移动或者经常打乱数据,可以用userPowerOf2Sizes选项提高磁盘复用率,但是不适合经常插入或者原地更新的集合上使用。因为分配的空间为2的幂
db.runCommand({"collMod":collectionName,"usePowerOf2Sizes":true})
upsert,update的第三个参数为true表示这个是upsert
$setOnInsert文档插入时设置字段的值
$save在文档不存在的时候插入,存在的时候更新,只有一个参数文档
批量更新多个文档,update的第四个参数为true表示更新所有匹配的文档
getLastError表示最后一次操作的相关信息.db.runCommand({getLastError:1})返回的n表示多少个文档更新了,
"updatedExisting" : true,说明对已有的文档进行更新
返回被更新的文档,findAndModify
写入安全机制