<?php /* mongodb_创建、删除、更新(转并学习) 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" } 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" } ==========================多个文档更新替换====================== */ ?>