MongoDB学习

Posted

tags:

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

常用语句:

创建数据库:use database_name

示例:use myfisrtmongoDB 

shell下提示:switched to db myfisrtmongoDB 表示成功

但此时用show dbs命令任然无法查看到新创建的数据库,需要插入第一条数据后,才可以查看。

 

删除数据库:db.dropDatabase() 

该命令是删除当前的数据库

提示:{"dropped":"myfirstmongoDB","ok":1}

 

插入文档:db.collections_name.insert(document)

表示在当前数据库的名为collections_name的集合中插入一条文档

示例:db.cols.insert({"content":"myFirstRecorder","by":"insaneXs"})

记录插入完成后,可以通过db.collections_name.find()命令来查看该数据库下名为collections_name的集合中全部的记录(文档)。

 

我们也可以将数据定义成一个变量,然后再通过上述命令插入

示例:document_name = {"content":"insertByDocumentVar"}

db.cols.insert(document_name)

定义了一个名为document_name的document变量,然后将document变量插入到集合中。

 

 

更新文档:mongoDB更新文档有两种方式,update()和save()

 

update()的语法格式:

db.collections_name.update(criteria, objNew, upsert, multi, writeConcern)

criteria:标准,即是查询条件,相当于SQL语句中的where语句

objNew: update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的部分

upsert: boolean类型,可选,表示文档不存在时,是否插入该文档,true表示插入,数据库默认为false

multi:boolean类型,可选,表示多条记录满足时,是否更新全部记录,true表示更新全部记录,数据库默认为false

writerConcert:可选,表示抛出异常的级别

 

示例:

db.cols.update({"content":"insertByDocumentVar"},{$set:{"content":"recorderUpdateByupdate"},true,true})

意义:

将当前数据库下cols集合中content值为insertByDocumentVar的文档全部更新成set后的文档(字段如果存在,则更新值,不存在,则在之前基础上增加字段),如果不存在,则插入该文档。

 

save():通过传入的文档来替换已有的文档

db.collections.save(x), x即是要更新的文档,mongoDB会根据x的_id的值去数据库中查找要更新的文档,如果不存在,则插入该文档。

示例:

db.cols.save({"_id":ObjectId("56a860650c412f8aa5c4c25a"),"content":"updateRecorderBySave"})

意义:将db数据库下的cols集合中的id为"56a860650c412f8aa5c4c25a"的文档替换(由于是文档被替换,因此如果新文档不含旧文档的其他字段时,其他字段将被删除。),没有则插入该记录(插入时id将不是自动生成,而就是id的值)。

 

mongoDB中的更新操作符

$inc 对一个int字段增加一个val值

{$inc:{filed:value}}

示例:

db.cols.update({"count":1},{$inc : {"count":1}})

意义:将当前数据库的cols集合中count等于1的文档中的count字段增加1

 

$set 相当于sql的set field = value,全部数据类型都支持

用法:{ $set : { field : value } }
示例:参考文章开头

 

$unset 删除某个字段

用法:{$unset:{filed : value}}

数据库先插入一条数据db.cols.insert{"filed1":"1","filed2":"2"};

示例:db.cols.update({"filed1":"1"},{$unset:{"filed2":"2"}})

用db.cols.find().pretty()查询

看到结果为:{ "_id" : ObjectId("56a874310c412f8aa5c4c261"), "field1" : "1" }

 

$push 将某个值追加到指定的filed中,该field必须要是数组

用法:{$push:{filed:value}}

示例:

数据库先插入一条数据 db.cols.insert{"myArray":["a","b"], "count":1}

db.cols.update({"content":1},{$push:{"c"}})

在查询集合,可看到结果:

  "_id" : ObjectId("56a877ec04d77a4fe6e85ffb"),
  "count" : 1,
  "myArray" : [
  "a",
  "b",
  "c"
]

 

$pushAll 和$push类似,只是$pushAll可以追加多个值到某个数组字段中

用法:{$pushAll:{field:array}}

示例同上,不再赘述,但是要注意字段值必须要是array

 

$addToSet 仅当某个值不再数组内时,才往数组中添加这个值

用法:{$addToSet:{field : value}}

示例同上,field必须要是数组。

 

$pop 删除数组内的一个值

用法:

删除数组最后一个值:{$pop :{field : 1}}

删除数组头一个值:{$pop : {field : -1}}

 

$pull 从field的数组内删除值为value的值

用法:{$pull : {filed:value}}

用法同上,如果有多个值为value,则全部删除

 

$pullAll 从field的数组内删除在数组array中的值

用法:{$pull : {filed : array}}

用法同上。

 

$ 操作符 表示从数组中找出是自己的那项

 因为得到的是该项的filed值,故要加上引号(红字部分)。

看一下官方的例子:
> t.find()
{ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", "votes" : 7 } ] }

> t.update( {‘comments.by‘:‘joe‘}, {$inc:{‘comments.$.votes‘:1}}, false, true )

> t.find()
{ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 4 }, { "by" : "jane", "votes" : 7 } ] }

需要注意的是,$只会应用找到的第一条数组项,后面的就不管了。
还需要注意的是,$和$unset联合使用会在数组中留下一条为NULL的记录
> t.insert({x: [1,2,3,4,3,2,3,4]}> t.find({ "_id" : ObjectId("4bde2ad3755d00000000710e"), "x" : [ 1, 2, 3, 4, 3, 2, 3, 4 ] }> t.update({x:3}, {$unset:{"x.$":1}})
> t.find()
{ "_id" : ObjectId("4bde2ad3755d00000000710e"), "x" : [ 1, 2, null, 4, 3, 2, 3, 4 ] }



MongoDB删除文档db.collection_name.remove()
用法:db.collection_name.remove(query, justone)
query:查询条件
justone:表示有多条记录满足时,是否要同时删除,可选,默认为false

删除一个集合中的全部文档:db.collection_name.remove({})
只删除第一个符合条件的元素:db.collection_name.remove({条件},1)


MongoDB查询文档:db.collection_name.find()
将查询结果格式化显示:db_collection_name.find().pretty()

AND条件查询:
用法:db.collection_name.find({filed1:value,field2:value....})

OR条件查询:
用法:db.collection_name.find({$or:[{filed:value},{field:value}]});
OR条件查询像是把多个条件放在一个数组中,然后由该数组构成一个文档,而AND条件查询则是各个条件直接构成一个文档。

 
参考:http://www.runoob.com/mongodb/mongodb-tutorial.html

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

数据库学习路线

mongodb 常用查询语句

MongoDB学习

MongoDB常用语句

mongoDB常用执行语句

MongoDB常用28条查询语句