Mongodb

Posted liushaocong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mongodb相关的知识,希望对你有一定的参考价值。

概念

MongoDB是面向文档的数据库,不是关系型数据库。放弃关系模型的主要原因就是为了获得更加方便的扩展性。

基本思路就是将原来“行”的概念换成更加灵活的“文档”模型。面向文档的一条记录就可以表示非常复杂的层次关系方式可以将文档或者数组内嵌进来,所以用一条记录就可以表示非常复杂的层次关系。

功能

索引,存储javascript,聚合,固定集合,文件存储

文档

文档是MongoDB的核心概念。多个键及其关联的值有序地放置在一起就是文档

文档不能有重复的键

区分大小写

集合

集合就是一组文档。类似于关系型数据库里的表

启动MongoDB

windows:进入到MongoDB下面的bin文件夹,运行mongod.exe

查看数据库

show dbs

选择要使用的数据库

use 数据库名

查看集合

show tables

创建集合

db.createCollection(集合名)

删除集合

db.drop_collection(集合名)

查看文档

db.集合名.find()

查看一条文档

db.集合名.findOne()

插入文档

db.集合名.insert({"键":"值"})

更新文档

db.集合名.update({要更新文档的限定条件},{新的文档})

删除文档

db.集合名.remove({要删除文档的限定条件})

 

使用修改器

通常文档只会有一部分要更新。利用原子的更新修改器,可以使得这种部分更新极为高效。

$set修改器入门

$unset 删除键

"$set"用来指定一个键的值,如果这个键不存在,则创建它,存在就修改

> db.analytics.find()
{ "_id" : ObjectId("5a654d25e2602fccd336b767"), "url" : "www.example.com", "pageviews" : 53 }

> db.analytics.update({"url":"www.example.com"},{"$set":{"message":"python"}})

> db.analytics.find()
{ "_id" : ObjectId("5a654d25e2602fccd336b767"), "url" : "www.example.com", "pageviews" : 53, "message" : "python" }

 

> db.blog.find()
{ "_id" : ObjectId("5a6550f2e2602fccd336b768"), "title" : "A Blog Post", "content" : "...", "author" : { "name" : "joe", "email" : "[email protected]" } }

> db.blog.update({"author.name":"joe"},{"$set":{"author.name":"joe schmoe"}})

> db.blog.find()
{ "_id" : ObjectId("5a6550f2e2602fccd336b768"), "title" : "A Blog Post", "content" : "...", "author" : { "name" : "joe schmoe", "email" : "[email protected]" } }

$inc增加和减少

"inc"修改器用来增加已有键的值,或者在键不存在时创建一个键

> db.games.find()
{ "_id" : ObjectId("5a65544ce2602fccd336b769"), "game" : "pinball", "user" : "joe" }

> db.games.update({"game":"pinball",{"$inc":{"score":50}}})

> db.games.find()
{ "_id" : ObjectId("5a65544ce2602fccd336b769"), "game" : "pinball", "user" : "joe", "score" : 50 }

增加次数$inc,只针对数字类型,如果键存在,则增加,不存在,则创建

{ "_id" : ObjectId("5a654d25e2602fccd336b767"), "url" : "www.example.com", "pageviews" : 52 }

db.analytics.update({"url":"www.example.com"},{"$inc":{"pageviews":1}})

> db.analytics.find()
{ "_id" : ObjectId("5a654d25e2602fccd336b767"), "url" : "www.example.com", "pageviews" : 53 }

 

数组修改器

数组操作,顾名思义,只能用在值为数组的键上。例如不能对整数做push,也不能对字符串做pop。使用"$set"或"$inc"来修改标量值

如果指定的键已经存在,"push"会向已有的数组末尾加入一个元素,要是没有就会创建一个新的数组。

> db.games.find()
{ "_id" : ObjectId("5a65544ce2602fccd336b769"), "game" : "pinball", "user" : "joe", "score" : 51 }

> db.games.update({"game":"pinball"},{$push:{"comments":{"name":"joe","content":"nice post."}}})

> db.games.find()
{ "_id" : ObjectId("5a65544ce2602fccd336b769"), "game" : "pinball", "user" : "joe", "score" : 51, "comments" : [ { "name" : "joe", "content" : "nice post." } ] }

经常会有这种情况,如果一个值不在数组里面就把它加进去。keyi在查询文档中用"ne"来实现。例如,要是作者不在引文列表中就添加进去,可以这样做

> db.papers.find()
{ "_id" : ObjectId("5a655a0ce2602fccd336b76a"), "authors cited" : "joe" }

> db.papers.update({"authors cited":{"$ne":"Richie"}},{$set:{"authors cited":"Richie"}})

> db.papers.find()
{ "_id" : ObjectId("5a655a0ce2602fccd336b76a"), "authors cited" : "Richie" }

用$addToSet可以避免重复

 



以上是关于Mongodb的主要内容,如果未能解决你的问题,请参考以下文章

ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

mongodb关联查询

无法在 MongoDB(猫鼬)文档中追加数组

在 Spring MongoDB 的 ReplaceRoot 管道阶段使用 $mergeObjects

如何创建一个查询来查找 2 个数字之间的值,这些数字是 MongoDB 中的字符串类型

MongoDB GridFS