设为首页收藏本站

UNIX技术社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
热搜: console
查看: 1421|回复: 0

mongodb_创建、删除、更新

[复制链接]
发表于 2013-4-17 11:11:10 | 显示全部楼层 |阅读模式
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" }
==========================多个文档更新替换======================

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表