添加环境变量
管理员cmd
设置数据存储位置
mongod.exe --dbpathE:\MongoDB\data\db
安装至windows服务
mongod.exe --logpath"E:\MongoDB\logs\logs.log" --logappend --dbpath"E:\MongoDB\data" --directoryperdb --serviceName MongoDB --install
use mydb 若没有则创建数据库
检查当前使用的数据库 db
查询数据库列表 show dbs 空的数据库不显示
db.dropDatabase()默认删除正在使用的数据库,如果没有选择删除test
创建集合
MongoDB的 db.createCollection(name, options) 用于创建集合。 在命令中, name 是要创建集合的名称。 Options 是一个文档,用于指定集合的配置
参数 类型 描述
Name String 要创建的集合的名称
Options Document (可选)指定有关内存大小和索引选项
db.createCollection('mycollection')
show collections 显示创建的集合
字段 | 类型 | 描述 |
capped | Boolean | (可选)如果为true,它启用上限集合。上限集合是一个固定大小的集合,当它达到其最大尺寸会自动覆盖最老的条目。 如果指定true,则还需要指定参数的大小。 |
autoIndexID | Boolean | (可选)如果为true,自动创建索引_id字段。默认的值是 true |
size | number | (可选)指定的上限集合字节的最大尺寸。如果capped 是true,那么还需要指定这个字段。 |
max | number | (可选)指定上限集合允许的最大文件数。 |
>db.createCollection("mycol",{capped:true,autoIndexId:true,size:6142800,max:1000})
{
"note" : "theautoIndexId option is deprecated and will be removed in a future release",
"ok" : 1
}
在MongoDB中并不需要创建集合。 当插入一些文档 MongoDB 会自动创建集合。
>db.mycol.insert({"name":"xuhaixing"})
WriteResult({"nInserted" : 1 })
> show collections
mycol
mycollection
drop() 删除集合
db.COLLECTION_NAME.drop()
_id 是12个字节十六进制数在一个集合的每个文档是唯一的。 12个字节被划分如下:
_id: ObjectId(4 bytestimestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer)
insert()命令的基本语法如下:
>db.COLLECTION_NAME.insert(document)
插入多个文档到集合 db.mycol.insert([{title:"aaa"},{title:"bbb"}])
db.mycol.find().pretty()查询集合中文档
除了find()方法还有findOne()方法,仅返回一个文档。
RDBMS Where子句等效于MongoDB
查询文档在一些条件的基础上,可以使用下面的操作
操作 | 语法 | 示例 | RDBMS等效语句 |
Equality | {<key>:<value>} | db.mycol.find({"by":"yiibai tutorials"}).pretty() | where by = 'yiibai tutorials' |
Less Than | {<key>:{$lt:<value>}} | db.mycol.find({"likes":{$lt:50}}).pretty() | where likes < 50 |
Less Than Equals | {<key>:{$lte:<value>}} | db.mycol.find({"likes":{$lte:50}}).pretty() | where likes <= 50 |
Greater Than | {<key>:{$gt:<value>}} | db.mycol.find({"likes":{$gt:50}}).pretty() | where likes > 50 |
Greater Than Equals | {<key>:{$gte:<value>}} | db.mycol.find({"likes":{$gte:50}}).pretty() | where likes >= 50 |
Not Equals | {<key>:{$ne:<value>}} | db.mycol.find({"likes":{$ne:50}}).pretty() | where likes != 50 |
and
db.mycol.find({"sex":"m","title":"liuyifei"})
Or
db.mycol.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
db.mycol.find({$or:[{"title":"liuyifei"},{"age":25}]})
{ "_id" :ObjectId("59bb234487e7c8628038c51c"), "title" :"zhaoliying", "age" : 25, "sex" : "m" }
{ "_id" :ObjectId("59bb235187e7c8628038c51d"), "title" :"liuyifei", "age" : 28, "sex" : "m" }
and和or连用
db.mycol.find({"age":{$gt:26},$or:[{"sex":"f"}]})
{ "_id" :ObjectId("59bb258787e7c8628038c51e"), "title" :"fanbingbing", "age" : 40, "sex" : "f"}
Update
db.mycol.update({"title":"xuhaixing"},{$set:{"title":"daS"}})
db.mycol.update({"title":"xiaoS"},{$set:{"age":32,"title":"daS"}})
update多条数据
db.mycol.update({"sex":"m"},{$set:{"sex":"f"},{multi:true}})
save有替换,没有插入
db.mycol.save({"_id":ObjectId("59bb258787e7c8628038c51e"),"title":"xiaoS"})
删除文档
MongoDB的 remove(,)方法用于从集合中删除文档。remove()方法接受两个参数。一个是标准缺失,第二是justOne标志
deletion criteria : 根据文件(可选)删除条件将被删除。
justOne : (可选)如果设置为true或1,然后取出只有一个文档。
> db.mycol.remove({"sex":"f"},1) 只删除一个
WriteResult({"nRemoved" : 1 })
db.mycol.remove()删除所有
MongoDB投影
MongoDB的find()方法,解释了MongoDB中查询文档接收的第二个可选的参数是要检索的字段列表。在MongoDB中,当执行find()方法,那么它会显示一个文档的所有字段。要限制这一点,需要设置字段列表值为1或0。1是用来显示字段,而0被用来隐藏字段。
db.mycol.find({},{"_id":0,"title":1})只显示id
limit()和skip(),显示文档数,跳过文档数
>db.mycol.find().limit(1)
{ "_id" :ObjectId("59bb234487e7c8628038c51c"), "title" :"zhaoliying", "age" : 25, "sex" : "f" }
>db.mycol.find().limit(1).skip(1)
{ "_id" :ObjectId("59bb235187e7c8628038c51d"), "title" :"liuyifei", "age" : 28, "sex" : "f" }
sort()接受一个包含字段列表以及排序顺序的文档,1升序,-1降序
db.mycol.find({},{"_id":0}).sort({"age":1,"title":1})
索引1升序 -1降序
>db.mycol.ensureIndex({"title":1,"age":-1})
ensureIndex() 方法还接受选项列表(这是可选),其列表如下:
参数 | 类型 | 描述 |
background | Boolean | 构建索引在后台以便建立索引不阻止其它数据库活动。指定true时建立在后台。缺省值是false. |
unique | Boolean | 创建一个唯一的索引,以使集合将不接受插入的的文档,其中的索引关键字或键匹配索引的现有值。指定true以创建唯一索引。缺省值是 false. |
name | string | 索引的名称。如果未指定,MongoDB通过连接索引的字段和排序顺序的名称生成一个索引名。 |
dropDups | Boolean | 创建一个字段唯一索引时可能会有重复。MongoDB索引键仅第一次出现,并从集合中删除包含该键后续出现的所有文档。指定true以创建唯一索引。缺省值是 false. |
sparse | Boolean | 如果为true,索引只引用与指定的字段的文档。这些索引使用更少的空间,但在某些情况下表现不同(特别是排序)。缺省值是 false. |
expireAfterSeconds | integer | 指定的值,以秒为单位,作为一个TTL控制MongoDB保留在此集合文件多久。 |
v | index version | 索引版本号。默认的索引版本取决于mongod创建索引时运行的版本。 |
weights | document | 重量(weight )是一个数字,它是从1至99,999的数字,表示字段相对于其它索引字段在得分方面的意义。 |
default_language | string | 对于文本索引,并为词干分析器和标记生成器列表中的语言决定了停用词和规则。它的默认值: english. |
language_override | string | 对于一个文本索引,包含在文档中指定字段的名称,语言来覆盖默认语言。它的默认值:language. |
MongoDB 聚合
>db.mycol.aggregate([{$group:{_id:"$age",numages:{$sum:1}}}]) 统计相同年龄段的人数
{ "_id" :30, "numages" : 2 }
{ "_id" :28, "numages" : 1 }
{ "_id" :25, "numages" : 1 }
db.mycol.aggregate([{$group:{_id:"$sex",numages:{$max:"$age"}}}])不同性别年龄最大的人
表达式 | 描述 | 示例 |
$sum | 从集合累加所有文档中的定义值 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]) |
$avg | 从集合中的所有文档计算所有给定值的平均值 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}]) |
$min | 从集合中获取的所有文件的最小的相应值 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}]) |
$max | 从集合中的所有文档中的相应值中获取最大值 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}]) |
$push | 插入数组值到文档中 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}]) |
$addToSet | 插入值所产生的数组到文档中,但不会产生重复 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}]) |
$first | 从源文件获取根据分组的头文件。通常,这使得只能意会再加上一些以前应用“$sort” -stage | db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}]) |
$last | 从源文件获取根据分组的最后文件。通常,这使得只能意会再加上一些以前应用 “$sort”-stage. | db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}]) |
db.stats()显示当前数据库的信息
db.help()显示帮助