(1).Document数据插入
1.插入文档
db.[collection].insert({nanme:"1"});
2.批量插入文档
shell的for循环
db.[collection].insert([{},{},...])
3.Save操作
save操作和insert操作区别在于当遇到_id相同的情况下
save完成更新和插入操作
insert只能完成插入操作,_id一样时,无法插入
(2).Document数据删除
1.删除列表中的所有数据
语法: db.[collection].remove(查询表达式, 选项);
选项是指{justOne:true/false},是否只删一行,默认为false
db.[collection].remove({});
db.[collection].remove(query);
query:是查询表达式,如果只是{}表示删除全部
例1:删除集合text中的name等于uspcat的记录
db.text.remove({name:"uspcat"});
例2:删除stu集合中的gender属性为m的文档,只删除1行
db.stu.remove({gender:'m',true});
2.小技巧
如果你想清除一个数据量十分庞大的集合
直接删除该集合并且重新建立索引的方法
比直接用remove的效率要高很多
(3).Document数据更新
语法: db.[collection].update(查询表达式,新值,选项);
1.强硬的文档替换式更新操作
db.[collection].update({查询器},{修改器})
强硬的更新会用新的文档代替老的文档
2.主键冲突时会报错并且停止更新操作
因为是强硬替换,当替换的文档和已有文档的ID冲突的时候
则系统会报错
3.insertOrUpdate操作
目的:查询器查出来数据就执行更新操作,查不出来就替换操作
做法:db.[collection].update({查询器},{修改器},true);
4.批量更新操作
默认情况当查询器查询多条数据的时候,默认就修改第一条数据
如何实现批量修改:
db.[collection].update({查询器},{修改器},false,true);
5.如果是想修改文档的某列,可以用$set关键字
db.[collection].update(query,{$set:{name:'aa'}});
修改时的赋值表达式
$set
:修改某列的值
$unset
:删除某个列
$rename
:重命名某个列
$inc
:增长某个列
multi
:是指修改多行(即使查询表达式命中多行,默认也只改1行,如果想改多行,可以用此选项)
例:把news中所有age=21的文档,都修改
db.news.update({age:21},{$set:{age:22}},{multi:true})
(4).Document数据查询
语法: db.[collection].find(查询表达式,查询的列);
1.查询所有文档,所有内容
db.stu.find()
2.查询所有文档的gender属性(_id属性默认总是查出来)
db.stu.find({},{gender:1});
3.查询所有文档的gender属性,且不查询_id属性
db.stu.find({},{gender:1,_id:0});
4.查询所有gender属性值为male的文档中的name属性
db.stu.find({gender:'male'},{name:1,_id:0});
查询表达式
1.最简单的查询表达式
{field:value}
是指查询field列的值为value的文档;
2.$ne --> !=
查询表达式
{field:{$ne:value}}
作用:查询field列的值不等于value的文档
3.$nin --> not in
作用:查询field列的值不在[xx,xx…]中
4.$all
语法: {field:{$all:[v1,v2..]}}
是指取出field列是一个数组,且至少包含v1,v2值
5.$exists
语法: {field:{$exists:1}}
作用:查询出含有field字段的文档
6.$nor
{$nor,[条件1,条件2]}
作用:是指所有条件都不满足的文档为真返回
8.用$where
表达式来查询
db.goods.find({$where:'this.cat_id!=3 && this.cat_id!=1'});
注意:用$where
查询时,mongoddb是把bson结构的二进制数据转换为
json结构的对象,然后比较对象的属性是否满足表达式,所有消耗额外
的性能,速度较慢。