基础语法的学习
4.1 MongoDB 插入文档
(1)insert() 方法
要插入数据到 MongoDB 集合,需要使用 MongoDB 的 insert() 或 save() 方法。
(2)语法
insert() 命令的基本语法如下:db.COLLECTION_NAME.insert(document)
(3)示例
a. 插入一个文档的语句,如下
> db.web_app.insert({
name:"追梦客",
oldName:"好童话",
description:"这是一个VR旅游电子商务网站"
})
WriteResult({"nInserted" : 1 })
b.插入多个文档,可以传递一个数组 insert() 命令的文件,如下所示:
>db.web_app.insert([{ name:"好童话",des:"这是一个o2o的vr旅游平台"},{city:"西安","address" : "www.dreamerkr.com.cn"}])
BulkWriteResult({
"writeErrors": [ ],
"writeConcernErrors": [ ],
"nInserted": 2,
"nUpserted": 0,
"nMatched": 0,
"nModified": 0,
"nRemoved": 0,
"upserted": [ ]
})
> db.web_app.find()
{ "_id" :ObjectId("54d877e4ebde50baebb6c4c8"), "name" : "追梦客", "oldName" :"好童话", "description" : "这是一个VR旅游电子商务网站" }
{ "_id" :ObjectId("54d87cdfebde50baebb6c4c9"), "name" : "好童话", "des" : "这是一个o2o的vr旅游平台" }
{ "_id" :ObjectId("54d87cdfebde50baebb6c4ca"), "city" : "西安", "address" :"www.dreamerkr.com.cn" }
可以看到插入两个document,也可以使用 db.post.save(document)。 如果不指定_id在文档中,然后将其 save() 方法和 insert()方法工作一样。如果指定_id,它会替换整个数据文件。
4.2 MongoDB 删除文档
(1)remove() 方法
remove() 方法用于从集合中删除文档。remove() 方法接受两个参数。第一个是deletion criteria ,第二是justOne标志:
deletion criteria :(可选)删除标准,根据文件将被删除。
justOne: (可选)如果设置为true或1,然后只删除一个文件。
(2) 语法:
语法remove()方法如下:>db.COLLECTION_NAME.remove(DELLETION_CRITTERIA)
(3)示例
a.查询前面创建的web_info集合,如下所示:
> db.web_info.find()
{ "_id" :ObjectId("54d82d94dd625e55ab00b9b2"), "address" :"www.dreamerkr.com.cn" }
{ "_id" :ObjectId("54d87cdfebde50baebb6c4ca"), "city" : "西安", "address" :"www.dreamerkr.com.cn" }
{ "_id" : ObjectId("54d87cdfebde50baebb6c4c9"),"name" : "好童话", "des" : "这是一个o2o的vr旅游平台" }
b.删除所有的文件,其address值为 ' www.dreamerkr.com.cn '
> db.web_info.remove({"address" :"www.dreamerkr.com.cn"})
WriteResult({"nRemoved" : 2 })
> db.web_info.find()
{ "_id" :ObjectId("54d87cdfebde50baebb6c4c9"), "name" : "好童话", "des" : "这是一个o2o的vr旅游平台" }
c.删除只有一个
如果有多个记录且要删除的只有第一条记录,那么设置remove()方法中justOne参数,如下所示:
> db.web_info.remove({},1)
WriteResult({"nRemoved" : 1 })
> db.web_info.find()
{"_id" : ObjectId("54d82d94dd625e55ab00b9b2"),"address" : "www.dreamerkr.com.cn" }
{"_id" : ObjectId("54d87cdfebde50baebb6c4ca"),"city" : "西安", "address" : "www.dreamerkr.com.cn" }
d.删除所有文件
如果不指定删除条件,然后MongoDB将从集合中删除整个文件
> db.demo.remove({})
WriteResult({ "nRemoved" : 2 })
> db.demo.find()
4.3 MongoDB 更新文档
(1)update() 方法
update() 和 save() 方法用于更新文档的集合。 update()方法更新现有的文档值,而save()方法如果文档不存在,则会插入新的文档对象
(2)语法:
update() 方法的基本语法如下:db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA,UPDATED_DATA)
(3)示例
a.查询前面创建的score集合,如下所示:
> db.score.find();
{ "_id" :ObjectId("54d9c3896638c1af0d2b1203"), "name" :"c1", "cn" : 88 }
{ "_id" :ObjectId("54d9c3e86638c1af0d2b1204"), "name" :"c2", "cn" : 88 }
b.只更新单一的文件,其name值为 “ zhangsan”
> db.score.update({"cn":{$gt:80}},{$set:{"name":"zhangsan"}})
WriteResult({ "nMatched" : 1,"nUpserted" : 0, "nModified" : 1 })
>db.score.find();
{ "_id" :ObjectId("54d9c3e86638c1af0d2b1204"), "name" :"c2", "cn" : 88 }
{ "_id" :ObjectId("54d9c3896638c1af0d2b1203"), "name" :"zhangsan", "cn" : 88 }
c. 更新多个需要设置参数置'multi' 为true,如下所示更新了两条记录:
> db.score.update({"cn":{$gt:80}},{$set:{"cn":89}},{multi:true})
WriteResult({ "nMatched" : 2,"nUpserted" : 0, "nModified" : 2 })
> db.score.find();
{ "_id" :ObjectId("54d9c3e86638c1af0d2b1204"), "name" :"c2", "cn" : 89 }
{ "_id" :ObjectId("54d9c3896638c1af0d2b1203"), "name" :"zhangsan", "cn" : 89 }
d. MongoDB的更新除了set操作符,还有其他的操作符,关于它们的功能就不做详细列出,下面列表会其他的操作符做简单描述:
序号 | 类型 | 描述 |
1 | $inc | 用法:{$inc:{field:value}} 作用:对一个数字字段的某个field增加value 示例:db.score.update({"cn":{$gt:80}},{$inc:{"cn":8}},{multi:true}) |
2 | $unset | 用法:{$unset:{field:1}} 作用:删除某个字段field |
3 | $push | 用法:{$push:{field:value}} 作用:把value追加到field里。注:field只能是数组类型,如果field不存在,会自动插入一个数组类型 |
4 | $pushAll | 用法:{$pushAll:{field:value_array}} 作用:用法同$push一样,只是$pushAll可以一次追加多个值到一个数组字段内。 |
5 | $addToSet | 用法:{$addToSet:{field:value}} 作用:加一个值到数组内,而且只有当这个值在数组中不存在时才增加。 |
6 | $pop | 用法:删除数组内第一个值:{$pop:{field:-1}}、删除数组内最后一个值:{$pop:{field:1}} 作用:用于删除数组内的一个值 |
7 | $pull | 用法:{$pull:{field:_value}} 作用:从数组field内删除一个等于_value的值 |
8 | $pullAll | 用法:{$pullAll:value_array} 作用:用法同$pull一样,可以一次性删除数组内的多个值。 |
9 | $rename | 用法:{$rename:{old_field_name:new_field_name}} 作用:对字段进行重命名 |
4.4 MongoDB 查询文档
(1)find() 方法
要从MongoDB 查询集合数据使用MongoDB 的 find() 方法,还存在一个findOne()方法,它是返回一个文件。
(2)语法
基本的find()方法语法如下:db.COLLECTION_NAME.find()。此方法将在非结构化的方式显示所有的文件,要显示在一个格式化的方式,在后面跟上pretty() 方法。
(3)示例
> db.web_info.find().pretty()
{ "_id" :ObjectId("54d82d94dd625e55ab00b9b2"), "address" :"www.hth.tv" }
{
"_id": ObjectId("54d87cdfebde50baebb6c4ca"),
"city": "西安",
"address": "www.hth.tv"
}
{
"_id": ObjectId("54d87cdfebde50baebb6c4c9"),
"name": "好童话",
"des": "这是一个o2o的vr旅游平台"
}
(4)RDBMS Where子句和MongoDB等同语句,要查询文件的一些条件的基础上,比较如下:
操作 | 语法 | 例子 | RDBMS 等同 |
Equality | {<key>:<value>} | db.score.find({"cn":88}).pretty() | where cn = 88 |
Less Than | {<key>:{$lt:<value>}} | db.score.find({"num":{$lt:50}}).pretty() | where num < 50 |
Less Than Equals | {<key>:{$lte:<value>}} | db.score.find({"num":{$lte:50}}).pretty() | where num <= 50 |
Greater Than | {<key>:{$gt:<value>}} | db.score.find({"num":{$gt:50}}).pretty() | where num > 50 |
Greater Than Equals | {<key>:{$gte:<value>}} | db.score.find({"num":{$gte:50}}).pretty() | where num >= 50 |
Not Equals | {<key>:{$ne:<value>}} | db.score.find({"num":{$ne:50}}).pretty() | where num != 50 |
(5)AND与OR在MongoDB中用法
a. MongoDB的与操作
在 find() 方法,如果通过多个键分离',',本语法如下所示:db.score.find({key1:value1, key2:value2}).pretty()
b.MongoDB的或操作
MongoDB的或操作查询,需要使用$or关键字。OR 基本语法如下所示:
>db. score.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
c.MongoDB的与和或进行组合查询 示例
> db.web_info.find({$and:[{"address": "www.hth.tv"},{$or:[{"name" : "好童话"},{"city" : "西安"}]}]}).pretty()
{
"_id": ObjectId("54d87cdfebde50baebb6c4ca"),
"city": "西安",
"address": "www.hth.tv"
}