mongodb_创建、删除、更新(转并学习) 简单

<?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" }
==========================多个文档更新替换======================


*/
?>

  

原文地址:https://www.cnblogs.com/xiangxiaodong/p/2820050.html