MongoDB基本操做命令

因为工做须要,笔者这两天使用了一下MongoDB。真的很不习惯!可是确实好用,命令比mysql和sqlserver简单不少。在这里整理一些MongoDB的基本操做命令分享出来。javascript

客户端的安装就不说了,笔者是shell经过服务器链接的MongoDB进行操做的,直接进入正题。java

show dbs:显示数据库列表 
show collections:显示当前数据库中的集合(相似关系数据库中的表) 
show users:显示用户mysql

use <db name>:切换当前数据库,这和MS-SQL里面的意思同样 
db.help():显示数据库操做命令,里面有不少的命令 
db.foo.help():显示集合操做命令,一样有不少的命令,foo指的是当前数据库下,一个叫foo的集合,并不是真正意义上的命令 
db.foo.find():对于当前数据库中的foo集合进行数据查找(因为没有条件,会列出全部数据) 
db.foo.find( { a : 1 } ):对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1正则表达式

MongoDB没有建立数据库的命令,但有相似的命令。sql

如:若是你想建立一个“myTest”的数据库,先运行use myTest命令,以后就作一些操做(如:db.createCollection('user')),这样就能够建立一个名叫“myTest”的数据库。mongodb

 

因为笔者是测试,因此目前用不上增、删、改的。不过我记得在Mon里对应的命令应该是insert、drop、update。这些只是针对表数据。针对数据库和数据表的没有接触就不说了。下面给你们整理的是Mon的条件查询命令。shell

find()/findOne()
mongodb数据库的查询操做即便用find()或者findOne()函数,也可根据不一样的条件进行查询。查询的写法(以find()为例)能够以下:
db.A.find()/db.A.find({})数据库

"{}"是否省略不影响查询,都表示查找集合A下的全部文档。也能够以文档作条件:db.A.find({"a":1,"b":1}),其中查找同时知足属
性a等于1且属性b也等于1的文档,若须要知足属性c等于1,可直接添加到文档中:db.A.find({"a":1,"b":1,"c":1})。数组

指定键的设置
指定键的设置即展现,好比某集合有10个属性,经查询后只关心集合中文档的某几个属性。以下文档:
{ "_id" : ObjectId("5018da521781352fe25bf4d2"), "a" : "1", "b" : "1", "c" : "1", "d" : "1", "e" : "1" }
只关系属性a,b,c可以下设置:
db.A.find({},{"a,":1,"b":1,"c":,"_id":0})
这里的1和0与文档中的键值是不一样意义的,这里的1:表示显示,0:表示不显示。其中"_id"键默认存在的,须要显示设置。服务器

结果以下:
{ "a" : "1", "b" : "1", "c" : "1" }

 

--------------------------------------条件查询可类比结构化查询语句SQL--------------------------------------------
条件查询
条件操做符
"$lt"===================>"<"
"$lte"==================>"<="
"$gt"===================>">"
"$gte"==================>">="
"$ne"===================>"!="

如:某集合B集合中文档有属性x值为整数,需查找10<x<=30的文档,写法以下:
db.B.find({"x":{"$gt":10,"$lte":30}})

如:从某集合B中查找日期属性day值大于2012/01/01的文档数据,写法以下:
db.B.find({"day":{"$gt":new Date("2012/01/01")}})
适合于须要进行日调度、月调度、周调度数据等业务处理范围的场合。

$in包含/$nin不包含
$in:查询匹配指定条件值的文档;
$nin:查询不匹配指定条件值的文档;

SQL:写法:字段 in ('值1','值1'.....)
mongodb:db.B.find({"x":{"$in":['值1','值2',.....]}})

SQL:写法:字段 not in ('值1','值1'.....)
mongodb:db.B.find({"x":{"$nin":['值1','值2',.....]}})

$in/$nin优势:可指定不一样类型条件和值。

$or或查询

$or:查询匹配多个条件多个值的文档;

SQL:写法:字段1 = 'xxx' or 字段2 in ( 'xxx').....
mongodb:db.B.find({"$or":[{"x":{"$in":['值1','值2'...]}},{"y":"3"}]})

$all匹配全部

好比文档:
{"name":jack,"age":[1,2,3]}
{"name":jack,"age":[1,4,3]}

db.B.find({"age":{"$all":[2,3]}})结果:{"name":jack,"age":[1,2,3]}

$exists 判断文档属性是否存在

db.B.find({"name":{"$exists":true}})   --查找属性name存在的文档
db.B.find({"name":{"$exists":false}})  --查找属性name不存在的文档

属性值为null状况
以下操做并可知道:
> db.C.find()
{ "_id" : ObjectId("5018fccd1781352fe25bf511"), "a" : "14", "b" : "14" }
{ "_id" : ObjectId("5018fccd1781352fe25bf512"), "a" : "15", "b" : "15" }
{ "_id" : ObjectId("5018fccd1781352fe25bf510"), "a" : "13", "b" : "13", "c" : null }
> db.C.find({"c":null})
{ "_id" : ObjectId("5018fccd1781352fe25bf511"), "a" : "14", "b" : "14" }
{ "_id" : ObjectId("5018fccd1781352fe25bf512"), "a" : "15", "b" : "15" }
{ "_id" : ObjectId("5018fccd1781352fe25bf510"), "a" : "13", "b" : "13", "c" : null }
可见查询属性c值为null文档,包括属性c值为null、该属性c不存在两个部分。若想只查询属性c为null的文档
以下:
> db.C.find({"c":{"$in":[null],"$exists":true}})
{ "_id" : ObjectId("5018fccd1781352fe25bf510"), "a" : "13", "b" : "13", "c" : null }

$not元条件句

可与其余条件配合使用,即不在匹配范围以内的文档,下面可见其用法。

$mod取模运算

db.B.find({"age":{"$mod":[5,1]}}) --表示查找年龄/5余1的全部文档

若查找年龄/5余1以外的全部文档,可结合$not运算:
db.B.find({"age":{"$not":{"$mod":[5,1]}}})

正则表达式

db.B.find({"name":/jack/i})

$size

> db.C.find()
{ "_id" : ObjectId("501e71557d4bd700257d8a41"), "a" : "1", "b" : [ 1, 2, 3 ] }
{ "_id" : ObjectId("501e71607d4bd700257d8a42"), "a" : "1", "b" : [ 1, 2 ] }
> db.C.find({"b":{"$size":2}})
{ "_id" : ObjectId("501e71607d4bd700257d8a42"), "a" : "1", "b" : [ 1, 2 ] }

$slice

返回数组的一个子集,即对以某属性为基础,返回多少条(范围)。也能够接受偏移值和要返回的元素数量,来返回中间的结果。
> db.C.find()
{ "_id" : ObjectId("501e71557d4bd700257d8a41"), "a" : "1", "b" : [ 1, 2, 3 ] }
{ "_id" : ObjectId("501e71607d4bd700257d8a42"), "a" : "1", "b" : [ 1, 2 ] }
> db.C.findOne({},{"b":{"$slice":[2,3]}})
{ "_id" : ObjectId("501e71557d4bd700257d8a41"), "a" : "1", "b" : [ 3 ] }
> db.C.findOne({},{"b":{"$slice":-2}})
{
        "_id" : ObjectId("501e71557d4bd700257d8a41"),
        "a" : "1",
        "b" : [
                2,
                3
        ]
}

 $where

便可执行任务javascript做为查询的一部分。
$where的值能够是function、也能够是字符串等等。

db.C.find({"$where":function(){return this.a == "1"}})与db.C.find({"$where":"this.a == '1'"}})

注意:采用$where子句查询在速度上较常规查询慢的多。因文档须要从BSON转换成javascript对象,而后经过"$where"的表达式来运行。
      不用利用索引。可用常规查询作前置过滤,配置"$where"查询进行调优,可达到不牺牲性能的要求。

至于多表查询,目前尚未用到,之后慢慢研究。条件查询的到这里基本也就知足个人使用了。但愿对你们也能有所帮助。

相关文章
相关标签/搜索