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学习的主要内容,如果未能解决你的问题,请参考以下文章