公司的一些后端,用的是MongoDB数据库,之前都没听说过...
上网查了下,感觉还挺好玩的...
整理了一些常用的 MongoDB shell 命令....
怕自己以后会忘记....
我在自己的电脑上装了MongoDB数据库,Windos系统...没办法,公司的数据库不能乱搞...
怎么安装MongoDB , 这里我就不说了..自己去百度谷歌....
下面的那个启动MongoDB数据库,是看自己的配置的,别乱来...嘿嘿...
我看得比较浅..不深入...
想深入了解的话...看看这两个文档吧..
一个是MongoDB权威指南,另一个是MongoDB2.4 的权威文档.
1.启动MongoDB数据库
mongod.exe --dbpath D:\MongoDB\db
启动数据库之后,才可以启动自带的Shell (mongo.exe)
在 MongoDB 中基本的概念是文档,集合,数据库.
基本概念
SQL术语MongoDB术语解释说明
databasedatabase 数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
column field数据字段/域
index index 索引
table joins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键.
一个MongoDB中可以建立多个数据库
MongoDB的默认数据库为"db",该数据库存储在db目录中.
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中.
插入:
insert函数添加一个文档到集合里面.
首先可以创建一个局部变量post,然后用insert存入表中. 例如:
post = {
"title":"My Blog Post",
"content":"Here's my blog post",
"date": new Date()
}
db.myblog.insert(post)
当然了,你也可以这么写:
db.user.insert({"name":"Java","age":0})
db.user.insert({"name":"C++","age":1})
db.user.insert({"name":"C--","age":2})
db.user.insert({"name":"Python","age":3})
db.user.insert({"name":"JavaScript","age":4})
db.user.insert({"name":"AngularJs","age":5})
db.user.insert({"name":"jQuery","age":6})
db.user.insert({"name":"Go","age":7})
db.user.insert({"name":"IOS","age":8})
db.user.insert({"name":"Android","age":9})
db.user.insert({"name":"ExtJs","age":10})
db.user.insert({"name":{"first":"Json","last":"Boume"},"age":11})
数组:
db.food.insert({"fruit":["apple","banana","peach"]})
db.food.insert({"fruit":["apple","kumquat","orange"]})
db.food.insert({"fruit":["cherry","banana","apple"]})
db.food.insert({"fruit":["apple","banana"]})
向数据库插入数据,没有指定ID,mongodb会自动添加一个全局唯一的ID
查询:
普通查询
db.user.find();//查询user表下所有的数据,shell默认显示20条
db.user.findOne();//查看user表下的一条数据
db.user.find().count();//查看user表中有多少条数据
db.user.find({"name":"Java"})//查询name对应的数据
db.user.find({"name":"Java","age":0})//多条件查询,每个条件的关系是 "and"
db.user.find({},{"name":1})//指定返回的键,此处指定返回"name"
db.user.find({},{"name":1,"_id":0}})//指定返回符合的"name",并且屏蔽"_id"字段(不屏蔽,每次查询默认出现)
db.user.find({},{"name":1,"age":1,"_id":0})//指定返回"name","age"两个字段,并且屏蔽"_id"字段
条件查询(函数)
"$lt": 小于
db.user.find({"age":{"$lt":5}})//查询 age小于5 的数据(不包含5)
"$lte": 小于等于
db.user.find({"age":{"$lte":5}})//查询 age小于等于5 的数据
"$gt": 大于
db.user.find({"age":{"$gt":5}})//查询 age大于5 的数据(不包含5)
"$gte": 大于等于
db.user.find({"age":{"$gte":5}})//查询 age大于等于5 的数据
"$ne": 不相等 (取反值)
db.user.find({"age":{"$ne":5}})//查询 age不等于5 的数据
"in" : 用来查询一个键的多个值 (支持不同的数据类型)
db.user.find({"age":{"$in":[0,1,2]}})//查询user表,age字段为0,1,2的数据
"nin" : 返回与查询条件不匹配的数据("$in"的反义)
db.user.find({"age":{"$nin":[1,2]}})//显示"age"不为1,2的所有数据
"or" : 不用解释,"or"接受一个包含所有可能条件的数组作为参数
db.user.find({"$or":[{"age":{"$in":[1,2]}},{"name":"ExtJs"}]})//查询age为1,2 name为ExtJs的数据.
组合查询 :
db.user.find({"age":{"$lt":5,"$gt:0"}})
"limit" : 限制结果数量(指定上限,而非下限)
//查询的全部数据中,只显示前面5条数据.
db.user.find().limit(5)//不加"limit(5)",会显示全部的数据,加上之后,就显示前五条.
"skip" : 限制结果数量(指定下限,而非上限)
//查询全部数据中,不显示前面的三条,3条数据之后的数据.
db.user.find().skip(3)//查询全部数据后,显示从开始三条数据之后的数据.(丢弃前三条)
"sort" : 升序/降序 (-1:降序/从大到小 , 1:升序/从小到大)
db.user.find().sort({"age":-1})//降序
db.user.find().sort({"age":1})//升序
//按照name升序,age降序
db.user.find().sort({"name":1,"age":-1})
日期类型查询
(模拟 查找2007/1/1 前注册的数据)
start = new Date("01/01/2007")
db.user.find({"registered":{"$lt":start}})
数组查询:
db.food.find({"fruit":"apple"})
$all : 通过多个元素来匹配数组 这个函数,没有双引号!!
db.food.find({"fruit":{$all:["apple","banana"]}})//查询既有"apple"又有"banana"的数据
"$size" : 可以使用其查询指定长度的数组.
db.food.find({"fruit":{"$size":2}})
查询内嵌文档
db.user.insert({"name":{"first":"Json","last":"Boume"},"age":11})
查询 :
db.user.find({"name.first":"Json"})//查询"name"下面,"first"为"Json"的数据.
db.user.find({"name.first":"Json","name.last":"Boume"})
聚合 :
"count()" : 放回当前表中文档的数量.
db.user.find().count()//返回user表中,文档的数量.
"distinct" : 用来找出给定键的不同的值.(去重复)
db.runCommand({"distinct":"user","key":"age"})//runCommand是关键字,distinct对应的是表名,key对应的是指定的键.
更新:
//update最少接收两个参数,第一个是要更新文档的限定条件.第二个是新的文档.
//假设咱们要给文档新增一个值,则需要增加一个新的键.
post = []
db.myblog.update({"title":"My Blog Post"},post)
删除:
db.user.remove({"name":"Java"})//删除name为"Java"的数据
db.user.remove();//这个命令会删除user集合中的所有的文档,但不会删除集合本身
db.user.remove({});//最新版本报错,试了下,换种写法
db.myblog.drop()//删除myblog表