您的位置:首页 > 数据库 > Mongodb

Mongodb基础入门(2)——增删改查等基础操作

2014-12-27 11:38 330 查看
简介:
无论是关系数据库还是非关系数据库,其基本操作:增、删、查、改。另外由于Mongodb存储的文档本质上是Bson对象,所谓的Bson也就是Json对象的二进制对象。因此,对Mongodb数据的操作元元素也就是Json。
在操作之前我们先来了解一下基本的命令:insert、find、remove、update
首先来认识几个基本命令:
1、show dbs:查看当前所有数据库
2、usedatabaseName:指定要使用的数据库
3、showtables/collections:查看当前数据库下的所有collection
4、db.createCollection(“collectionName”):创建集合。因为Mongodb支持隐式创建数据库和集合,因此该命令不常用。
5、db.dropDatabase():删除当前使用的数据库
6、db.collectionName.drop();删除名字为collection的集合。
 
增(insert)
首先建立一个局部变量(test),此变量是个Json对象,然后通过insert函数插入数据。
命令格式:db.collectionName.insert()
> test={"title":"liuddssd0000dong","content":"hahhhhhhhhhh","date":newDate()}
{

        "title" : "liuddssd0000dong",

        "content" :"hahhhhhhhhhh",

        "date" :ISODate("2014-12-15T06:28:53.604Z")

}

> db.doc.insert(test)
或者直接:db.doc.insert({title:"test",content:"hello world",data:newDate()})
注意:此命令执行时,如果doc集合不存在,则会自动创建。



 
当然也可以一次增加多个文档,如下:



 
查(find)
命令格式:db.collectionName.find(查询表达式,结果显示的列);
无条件查询:
> db.doc.find()
条件查询(_id属性总是默认查出来):
> db.doc.find({"content":"hahhhhhhhhhh"})
(注意:_id是记录的逐渐,默认的是ObjectId类型,类似的还有_class,作为类路径名)



 
指定结果中显示name列:
>db.doc.find({title:"test4",name:"god"},{name:1})



指定查询结果中不显示_id列:
>db.doc.find({name:"god"},{_id:0,title:1})



 
高级查询:
查询表达式中可以使用多种运算符来增强查询功能。
比较运算符:
名称
介绍
$gt

$gte
>=
$lt

$lte
<=
$ne
!=
$in
和mysql中的in一致
$nin
not in
$all
满足数组中所有条件
1、{field:{$ne:value}}指field列的值不等于value
2、{field:{$all:[value1,value2…]}指取出的field列是一个数组,并且至少包含value1和value2.
3、{field:{$gt:value}}指返回field列的值大于value的文档。
4、{field:{$gt:value1,$lt:value2}}返回field列大于value1,小于value2的文档。
  
 
逻辑运算符:
名称
介绍
$or
or
$and
and
$not
not
$nor
数组中所有条件都不满足为真
1、{$nor:[条件1,条件2…]}指当条件1和条件2都不满足的文档才返回。
 
元素运算符:
名称
介绍
$exists
某列存在时为真
$mod
满足其求余条件为真
$type
数据为某类型则为真
1、{field:{$exists:1}}查询出包含field字段的文档。
 
 
Js运算符:
名称
介绍
$where
Js表达式为真则为真
$reges
正则表达式匹配成功时则为真
$inc
某列增长
$rename
重命名某列
$setOnInsert
当upsert时,设置字段的值
$set
设置某字段新值
$unset
删除指定的列
注意:$where在查询时,Mongodb先将bson结构的二进制数据转换为json结构对象,在依次比较对象的属性是否满足表达式,速度较慢。
1、>
db.doc.find({$where:"this.title='test4'"})



2、>
db.doc.find({name:/go.*/})



 
分页查询:
limit(数字):查询指定数量的记录。
>db.doc.find().limit(2)



 
skip(数字):跳过指定数量的数据。
>db.doc.find().skip(1)



注意:这limit()和skip()可以连用。
 
改(update)
命令格式:db.collectionName.update(查询表达式,赋值表达式,参数);
参数:{upsert:true/false,multi:true/false}.upsert指在修改时若不存在匹配的列,则允许直接插入改行。multi则是指是否运行修改多行,true:修改多行,false:修改一行。默认为false。
在这里我们通常以为db.doc.update({title:"test"},{title:"have replace"})。执行后的输出结构应该为:
{ "_id" :ObjectId("549e220245ed24b93c5fce7f"), "title" : "havereplace", "content" : "hello world", "data": ISODate("2014-12-27T03:05:38.315Z")
}
但是当我们执行完毕后却发现结果变为:{"_id" : ObjectId("549e211645ed24b93c5fce7e"),"title" : "have replace" }。也就是说update时,除了主键不能修改,其余内容全被第二个参数的内容替换。如下图所示:



 
如果想要修改文档某列的值,而不是直接替换,可以使用$set关键字:
> db.doc.update({title:"test4",name:"ldd"},{$set:{name:"god"}})



除了$set之外,修改时可用的关键字还有如下:
$unset:删除某列
$rename :重命名某列
$inc :增长某列
$setOnInsert :当upsert为true时,并且发生了insert操作,可以补充的字段。
 
删(remove)
remove函数既可以删除整个表的记录,也可是删除符合条件的记录。不加条件时就是全部删除记录。命令格式:db.collectionName.remove(选项表达式,参数);
参数:{justOne:true/false},true:只删除一行,false:全部删除。默认为false。
全部删除:
> db.test.remove({})
条件删除:
> db.test.remove({"title":"test1"})



 
  
指定参数删除:
>db.doc.remove({title:"test3"},{justOne:true})



注意:查询表达式为Json对象。满足查询表达式的行将被删掉。
 
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: