您的位置:首页 > 数据库 > Mongodb

mongodb_创建、删除、更新 .

2013-08-19 11:41 513 查看
Mongodb(版本:mongodb-win32-i386-2.0.6)数据库对数据同样可以进行增删改查的操作,如下:

1.创建新增操作

db.a.insert({"name":"jk"})

--insert函数,直接将文档做参数,保存到集合a中。

2.删除操作

db.a.remove()

--删除a集合中的所有文档,但不删除集合本身,原有的索引也保留。

db.a.remove({"name":"jk"})

--删除a集合中含有name为jk的所有文档。

--支持以一个查询文档作为可选参数,可删除满足该参数的所有文档

--删除数据时永久性的,不能撤销,也不能恢复。

db.a.drop()

--删除a集合,包括a集合中所有文档。

3.更新文档

1>.修改的目标文档

2>.修改器 描述对找到的文档做哪些修改

3>.更新操作是原子的:若两个更新同时发生,先到达服务器的先执行,接着执行另外一个。因此相互有冲突的更新可以火速传递,并不会相互干扰;最后的更新会取得“胜利”。

==============================单个文档更新替换====================

针对模式结构发生较大变化场合,将下面文档1:

{"uid":"20120001","type":"1","num":30,"desc":"hello world!"}

修改成以下文档2:

{"uuid":"20120001",

"utext":{

"type":"1","num":30,"desc":"hello world!"

}

}

具体的操作如下:

> db.a.insert({"uid":"20120001","type":"1","num":30,"desc":"hello world!"})

> db.a.findOne()

{ "_id" : ObjectId("5002112a81b954b6161a7d8d"), "uid" : "20120001", "type" : "1"

, "num" : 30, "desc" : "hello world!" }

>var obj = db.a.findOne({"uid":"20120001"})

>obj.utext={"type":"1","num":30,"desc":"hello world!"}

{ "type" : "1", "num" : 30, "desc" : "hello world!" }

> obj.uuid = obj.uid

20120001

>delete obj.type

true

>delete obj.num

true

>delete obj.desc

true

>delete obj.uid

true

>db.a.update({"uid":"20120001"},obj)

> db.a.findOne()

{

"_id" : ObjectId("5002112a81b954b6161a7d8d"),

"utext" : {

"type" : "1",

"num" : 30,

"desc" : "hello world!"

},

"uuid" : "20120001"

}

-------------------------------------可能出现的问题------------------------------------

update是首先查询目标文档,然后在进行替换更新。若查询的时候存在多个目标文档的情况下,情况又会如何呢?。看下面的例子:

1>.当更新的对象是更新时查找出的第一条记录情况:

保存如下文档:

{"uid":"20120002","type":"2","num":40,"desc":"hello world1!"}

{"uid":"20120002","type":"1","num":50,"desc":"hello world2!"}

> db.a.find({"uid":"20120002"})

{ "_id" : ObjectId("500216de81b954b6161a7d8f"), "uid" : "20120002", "type" : "2"

, "num" : 40, "desc" : "hello world2!" }

{ "_id" : ObjectId("50026affdeb4fa8d154f8572"), "uid" : "20120002", "type" : "1"

, "num" : 50, "desc" : "hello world1!" }

> var p = db.a.findOne({"uid":"20120002","type":"2"})

> p.type="3"

3

> db.a.update({"uid":"20120002"})

> db.a.find()

{ "_id" : ObjectId("500216de81b954b6161a7d8f"), "uid" : "20120002", "type" : "3"

, "num" : 40, "desc" : "hello world2!" }

{ "_id" : ObjectId("50026affdeb4fa8d154f8572"), "uid" : "20120002", "type" : "1"

, "num" : 50, "desc" : "hello world1!" }

更新结果:update时将查找出满足条件的第一条记录进行更新,其他记录不变。

2>.当更新的对象是不是更新时查找出的第一条记录情况:

接上例继续:

> var o = db.a.findOne({"uid":"20120002","type":"1"})

> o.type="4"

4

> db.a.update({"uid":"20120002"},o)

cannot change _id of a document old:{ _id: ObjectId('500216de81b954b6161a7d8f'),

uid: "20120002", type: "3", num: 40.0, desc: "hello world2!" } new:{ _id: Objec

tId('50026affdeb4fa8d154f8572'), uid: "20120002", type: "4", num: 50.0, desc: "h

ello world1!" }

更新结果:update更新第一条时o的"_id"与第二条记录的"_id"重复而出错。

=====================单个文档更新替换=====================

=====================多个文档更新替换=====================

默认情况下,更新只能对符合条件的第一个文档进行操作。多文档更新主要涉及update方法的第四个参数,默认为false,若设置为true,即进行多文档更新。

将所有uid为20120002的文档增加一个属性为sname值为jk:

> db.a.find()

{ "_id" : ObjectId("500216de81b954b6161a7d8f"), "uid" : "20120002", "type" : "3"

, "num" : 40, "desc" : "hello world2!" }

{ "_id" : ObjectId("50026affdeb4fa8d154f8572"), "uid" : "20120002", "type" : "1"

, "num" : 50, "desc" : "hello world1!" }

> db.a.update({"uid":"20120002"},{$set:{"sname":"jk"}},false,true)

> db.a.find()

{ "_id" : ObjectId("500216de81b954b6161a7d8f"), "desc" : "hello world2!", "num"

: 40, "sname" : "jk", "type" : "3", "uid" : "20120002" }

{ "_id" : ObjectId("50026affdeb4fa8d154f8572"), "desc" : "hello world1!", "num"

: 50, "sname" : "jk", "type" : "1", "uid" : "20120002" }

==========================多个文档更新替换======================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: