MongoDB基础

数据库创建与删除

use DATABASE_NAME
若存在数据库,则切换到数据库下,若没有,则创建之后在切换到数据库下
db 查看当前所在数据库
show dbs 查询数据库列表
show collections 查询数据库下的集合列表
新创建的空数据库不会显示在数据库列表中,需要至少插入一个文档进去
db.dropDatabase() 删除当前的数据库,如果没有在任何数据库里面,则默认删除 test 数据库
db.createCollection( String Name,Cocument Options ) 用来创建集合,name是要创建的集合的名字,Options是可选的,指定有关内存大小,和索引选项。以下是可以使用的选项列表

字段类型描述
cappedboolean(可选)如果为true,则启用封顶集合。封顶集合是固定大小的集合,会自动覆盖最早的条目,当它达到其最大大小。如果指定true,则需要也指定尺寸参数。
autoIndexIDBoolean(可选)如果为true,自动创建索引_id字段的默认值是false。
sizenumber(可选)指定最大大小字节封顶集合。如果封顶如果是 true,那么你还需要指定这个字段。
maxnumber(可选)指定封顶集合允许在文件的最大数量。

db.createCollection("mycol", { capped : true, autoIndexID : true, size : 6142800, max : 10000 } )
在mongo中,不需要创建集合,当我们向集合中插入数据时,MongoDB会自动创建集合

db.COLLECTION_NAME.drop() 从数据库中删除一个集合,返回值为true,表示删除成功。

MongoDB支持的数据类型的列表如下:

类型描述
String最常用的数据类型,必须是有效的UTF-8
Integer存储一个数值,整数可以是32位或64位,取决于服务器
Boolean存储一个布尔值
Double存储浮点值
Min/Max keys被用来对BSON元素的最低和最高值比较
Arrays使用此类型的数组或列表或多个值存储到一个键
Timestamp时间戳。这可以方便记录时的文件已被修改或添加
Object此数据类型用于嵌入式的文件
Null这种类型是用来存储一个Null值
Symbol此数据类型用于字符串相同,但它通常是保留给特定符号类型的语言使用
Date此数据类型用于存储当前日期或时间的UNIX时间格式。可以指定自己的日期和时间,日期和年,月,日到创建对象
Object ID此数据类型用于存储文档的ID
Binary data此数据类型用于存储二进制数据
Code此数据类型用于存储到文档中的JavaScript代码
Regular expression此数据类型用于存储正则表达式
插入数据

db.COLLECTION_NAME.insert(document) 向集合中插入数据,其中document也可以是一个document数组

db.COLLECTION_NAME.find() 在非结构化的方式显示所有文件
db.COLLECTION_NAME.find().pretty() 显示在一个格式化的方式
db.COLLECTION_NAME.findOne() 返回一个文件

条件查询

AND在mongo中的用法
如果在find()方法中,通过多个键分离,那么Mongo将按照and的方式连接
db.COLLECTION_NAME.find({key1:value1,key2:value2})
示例:在movie集合中,查找所有name是test,discriptions是”this is a test” 的文件
db.movie.find({"name":"test","discriptions":"this is a test"})
上面的示例等价于 where name="test" and discriptions="this is a test"

OR在mongo中的用法
在 OR 条件的基础上查询文件,需要使用$or关键字,基础语法如下:
db.COLLECTION_NAME.find({&or:[{key1:value1},{key2:value2}]})

OR 和 AND 一起使用
示例:在集合中查询 number>10, aut=xuan或者titile=test的文件
db.COLLECTION_NAME.find("number":{&gt:10},&or:[{"auth"="xuan"},{"title"="test"}])

数据更新

update() 更新现有的文档值
db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA)
示例:
假设有以下集合

{ "_id" : ObjectId(5983548781331adf45ec5), "title":"MongoDB Overview"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Yiibai Overview"}

下面的例子将设置新标题’MongoDB Overview’的文件,更新其标题是“New MongoDB Tutorial”
>db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}})
MongoDB默认将只更新单一的文件,来更新多个你需要设置参数置’multi’ 为true
db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}},{multi:true})

db.COLLECTION_NAME.remove(DELLETION_CRITTERIA) 从集合中删除文档,remove() 方法接受两个参数。第一个是删除criteria ,第二是justOne标志:
deletion criteria :(可选)删除标准,根据文件将被删除。
justOne : (可选)如果设置为true或1,然后只删除一个文件。
如果不指定删除条件,然后MongoDB将从集合中删除整个文件。这相当于SQL的truncate命令。

投影

mongodb 投影意思是只选择必要的数据而不是选择一个文件的数据的整个。如果一个文档有5个字段,需要显示只有3个,然后选择其中只有3个字段。

find() 方法
MongoDB 的find()方法,在 MongoDB查询 文档解释接受第二个可选参数是要检索的字段列表。在MongoDB中,当执行find()方法,那么它会显示一个文档所有字段。要限制这一点,需要设置的字段列表值1或0。 1用来显示字段而0是用来隐藏字段。

语法:
find()方法具有投影基本语法如下
db.COLLECTION_NAME.find({},{KEY:1})

limit()方法`
要限制 MongoDB 中的记录,需要使用 limit() 方法。 limit() 方法接受一个数字型的参数,这是要显示的文档数。

语法:
limit() 方法的基本语法如下
db.COLLECTION_NAME.find().limit(NUMBER)

Skip() 方法(默认值为0)
除了limit() 方法,还有一个方法skip() 也接受数字类型的参数,并使用跳过的文档数。
语法
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
只显示第二个文档
db.mycol.find({},{"title":1,_id:0}).limit(1).skip(1)

排序

sort() 方法
要在 MongoDB 中的文档进行排序,需要使用sort()方法。 sort() 方法接受一个文档,其中包含的字段列表连同他们的排序顺序。要指定排序顺序1和-1。 1用于升序排列,而-1用于降序。

语法
sort() 方法的基本语法如下

db.COLLECTION_NAME.find().sort({KEY:1})
如果不指定排序优先,那么sort() 方法将文档显示在升序排列。

索引

ensureIndex() 方法 索引
要创建一个索引,需要使用MongoDB 的ensureIndex()方法。

语法:
ensureIndex() 方法的基本语法如下
db.COLLECTION_NAME.ensureIndex({KEY:1})
这里关键是要在其中创建索引,1是按升序排列的字段名称。要创建降序索引,需要使用-1。
db.mycol.ensureIndex({"title":1})

在ensureIndex()方法,可以通过多个字段多个字段上创建索引。

db.mycol.ensureIndex({"title":1,"description":-1})

ensureIndex() 方法也可以接受的选项列表(可选),其下面给出的列表:

参数类型描述
backgroundBoolean在后台建立索引,以便建立索引并不能阻止其他数据库活动。指定true建立在后台。默认值是 false.
uniqueBoolean创建唯一索引,以便收集不会接受插入索引键或键匹配现有的值存储在索引文档。指定创建唯一索引。默认值是 false.
namestring索引的名称。如果未指定,MongoDB中都生成一个索引名索引字段的名称和排序顺序串联.
dropDupsBoolean创建一个唯一索引的字段,可能有重复。 MongoDB的索引只有第一次出现的一个键,从集合中删除的所有文件包含该键的后续出现的。指定创建唯一索引。默认值是 false.
sparseBoolean如果为true,指数只引用文档指定的字段。这些索引使用更少的空间,但在某些情况下,特别是各种不同的表现。默认值是 false.
expireAfterSecondsinteger指定一个值,以秒为TTL控制多久MongoDB的文档保留在此集合.
vindex version索引版本号。默认的索引版本取决于mongodb 运行的版本在创建索引时.
weightsdocument权重是从1到99999范围内的数,表示该字段的意义,相对于其他的索引字段分数.
default_languagestring对于文本索引时,决定停止词和词干分析器和标记生成规则列表的语言。默认值是 english.
language_overridestring对于文本索引时,指定的名称在文档中包含覆盖默认的语言,语言字段中。默认值是语言。
聚合

聚合操作过程中的数据记录和计算结果返回。聚合操作分组值从多个文档,并可以执行各种操作,分组数据返回单个结果。在SQL COUNT(*)和group by 相当于MongoDB的聚集。

aggregate() 方法
对于在MongoDB中聚集,应该使用aggregate()方法。

语法:
aggregate() 方法的基本语法如下

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

例子:
在集合中,有以下的数据:

{
   _id: ObjectId(7df78ad8902c)
   title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by_user: 'yiibai yiibai',
   url: 'http://www.yiibai.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
},
{
   _id: ObjectId(7df78ad8902d)
   title: 'NoSQL Overview', 
   description: 'No sql database is very fast',
   by_user: 'yiibai yiibai',
   url: 'http://www.yiibai.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 10
},
{
   _id: ObjectId(7df78ad8902e)
   title: 'Neo4j Overview', 
   description: 'Neo4j is no sql database',
   by_user: 'Neo4j',
   url: 'http://www.neo4j.com',
   tags: ['neo4j', 'database', 'NoSQL'],
   likes: 750
},

现在从上面的集合,如果想显示一个列表,有很多用户写的教程,那么使用 aggregate() 方法,如下所示:

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])

{
   "result" : [
      {
         "_id" : "yiibai yiibai",
         "num_tutorial" : 2
      },
      {
         "_id" : "yiibai yiibai",
         "num_tutorial" : 1
      }
   ],
   "ok" : 1
}

上述使用的情况相当于SQL查询 select by_user, count(*) from mycol group by by_user

在上面的例子中,我们已分组字段 by_user 文档,并在每个的次数by_user先前的值总和递增。没有聚集表达式列表。

b表达式描述示例
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”}}}])
管道

在UNIX 命令 shell 管道是指一些输入和输出作为输入下一个命令等执行操作的可能性。 MongoDB 聚合框架也支持同样的概念。有一组可能的阶段,每个这些的一组文档作为输入,并产生一个结果集的文件(或最终生成的JSON文档在管道末端)。然后又再次被用来为下一阶段等。

可能的阶段聚合框架如下:

  • $project: 用于选择从收集的一些具体字段。
  • $match: 这是一个滤波操作,因此可以减少量,作为下一阶段的输入给定的文档。
  • $group: 如上所讨论的,这不实际的聚合。
  • $sort: 文件排序。
  • $skip: 与此有可能向前跳过的文件列表中的一个给定的的文档数量。
  • $limit: 这限制了的文档数量看一下由从当前位置开始的给定数
  • $unwind: 这是用来平仓文档的中使用数组。使用数组时,数据是一种pre-joinded,再次有个别文件,此操作将被取消。因此,这个阶段,数量会增加文件的下一阶段。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值