mongoDB学习笔记二
来源:互联网 发布:伦敦高级应召女郎 知乎 编辑:程序博客网 时间:2024/05/21 08:45
第三章 创建 更新和删除文档
1 插入并保存文档
> db.foo.insert({"bar":"baz"})
WriteResult({ "nInserted" : 1 })
> db.foo.find()
{ "_id" :ObjectId("586a5b4118af40bbf39030af"), "test" : 2 }
{ "_id" :ObjectId("586b13d6a0cb040ba53f2464"), "bar" :"baz" }
2 删除文档
> db.foo.remove()
#测试删除速度
示例代码如下:
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2017/1/3 12:15# @Author : Retacn# @Site : 测试删除速度# @File : test_del.py# @Software: PyCharm__author__ = "retacn"__copyright__ = "property of mankind."__license__ = "CN"__version__ = "0.0.1"__maintainer__ = "retacn"__email__ = "zhenhuayue@sina.com"__status__ = "Development"from pymongo import MongoClientimport time# 创建数据库联接client = MongoClient()db = client.test_databasecollection = db.bar#print(collection)# 添加一佰万个虚拟元素#for i in range(1000000):# collection.insert({"foo": "bar", "baz": i, "z": 10 - i})# 删除并开始计时start = time.time()collection.remove()collection.find_one()# 计算用时total = time.time() - startprint("%d seconds" % total)
运行结果如下:
37 seconds
也可以用其它方法删除
> show collections
Bar
#在python代码中可以使用db.drop_collection(“bar”)
> db.bar.drop()
true
> show collections
>
3 更新文档
#添加数据记录
>db.users.insert({"name":"retacn","friends":33,"enemies":2})
WriteResult({ "nInserted" : 1 })
#查询单条记录
> db.users.findOne()
{
"_id" : ObjectId("586b40507dfc144b68de4071"),
"name" : "retacn",
"friends" : 33,
"enemies" : 2
}
#定义人员变量
> varretacn=db.users.findOne({"name":"retacn"})
#查看变量值
> retacn
{
"_id" : ObjectId("586b40507dfc144b68de4071"),
"name" : "retacn",
"friends" : 33,
"enemies" : 2
}
#定义人员属性变量
>retacn.relationships={"friend":retacn.friends,"enemies":retacn.enemies}
{ "friend" : 33,"enemies" : 2 }
#设置人员属性值
> retacn.username=retacn.name
retacn
> delete retacn.friends
true
> delete retacn.enemies
true
> delete retacn.name
True
#更新人员信息到数据库
>db.users.update({"name":"retacn"},retacn)
WriteResult({ "nMatched" : 1,"nUpserted" : 0, "nModified" : 1 })
#查询人员信息
> db.users.findOne()
{
"_id" : ObjectId("586b40507dfc144b68de4071"),
"relationships" : {
"friend" : 33,
"enemies" : 2
},
"username" : "retacn"
}
使用修改器:
#查询人员信息
> db.users.findOne()
{
"_id" : ObjectId("586b40507dfc144b68de4071"),
"relationships" : {
"friend" : 33,
"enemies" : 2
},
"username" : "retacn",
"age" : 32
}
#使用修改器修改人员信息
>db.users.update({"username":"retacn"},{"$inc":{"age":1}})
WriteResult({ "nMatched" : 1, "nUpserted": 0, "nModified" : 1 })
#查询人员信息
> db.users.findOne()
{
"_id" : ObjectId("586b40507dfc144b68de4071"),
"relationships" : {
"friend" : 33,
"enemies" : 2
},
"username" : "retacn",
"age" : 33
}
使用$set修改器
#查询用户信息
> db.users.findOne()
{
"_id" : ObjectId("586b40507dfc144b68de4071"),
"relationships" : {
"friend" : 33,
"enemies" : 2
},
"username" : "retacn",
"age" : 33
}
#更新用户信息
>db.users.update({"_id":ObjectId("586b40507dfc144b68de4071")},{"$set":{"sex":"male","loction":"ZiBo"}})
WriteResult({ "nMatched" : 1,"nUpserted" : 0, "nModified" : 1 })
#查询更新后用户信息
> db.users.findOne()
{
"_id" : ObjectId("586b40507dfc144b68de4071"),
"relationships" : {
"friend" : 33,
"enemies" : 2
},
"username" : "retacn",
"age" : 33,
"sex" : "male",
"loction" : "ZiBo"
}
删除属性键
> db.users.findOne()
{
"_id" : ObjectId("586b40507dfc144b68de4071"),
"relationships" : {
"friend" : 33,
"enemies" : 2
},
"username" : "retacn",
"age" : 33,
"sex" : "male",
"loction" :"ZiBo"
}
#删除属性键值
>db.users.update({"username":"retacn"},{"$unset":{"loction":"ZiBo"}})
WriteResult({ "nMatched" : 1,"nUpserted" : 0, "nModified" : 1 })
> db.users.findOne()
{
"_id" : ObjectId("586b40507dfc144b68de4071"),
"relationships" : {
"friend" : 33,
"enemies" : 2
},
"username" : "retacn",
"age" : 33,
"sex" : "male"
}
修改内嵌文档
>db.users.update({"username":"retacn"},{"$set":{"relationships.friend":32}})
WriteResult({ "nMatched" : 1,"nUpserted" : 0, "nModified" : 1 })
> db.users.findOne()
{
"_id" : ObjectId("586b40507dfc144b68de4071"),
"relationships" : {
"enemies" : 2,
"friend" : 32
},
"username" : "retacn",
"age" : 33,
"sex" : "male",
"location" : "ZiBo"
}
增加/减少,前面已测试,如果键不存在,会自动创建
数组修改器
#添加记录
>db.blog.posts.insert({"title":"A blogpost",content:"...","author":{"name":"retacn","email":"zhenhuayue@sina.com"}})
WriteResult({ "nInserted" : 1 })
#查看记录
> db.blog.posts.find()
{ "_id" :ObjectId("586f21115da1e3bac2c373fe"), "title" : "Ablog post", "content" : "...", "author" : {"name" : "retacn", "email" : "zhenhuayue@sina
.com" } }
> db.blog.posts.findOne()
{
"_id" :ObjectId("586f21115da1e3bac2c373fe"),
"title" : "A blog post",
"content" : "...",
"author" : {
"name" :"retacn",
"email" :"zhenhuayue@sina.com"
}
}
#更新记录
> db.blog.posts.update({"author.name":"retacnyue"},{$push:{"comments":{"name":"retacn","email":"zhenhuayue@sina.com","content":"nicepost"}}})
WriteResult({ "nMatched" : 1,"nUpserted" : 0, "nModified" : 1 })
#查看更新后记录
> db.blog.posts.findOne()
{
"_id" : ObjectId("586f21115da1e3bac2c373fe"),
"title" : "A blog post",
"content" : "...",
"author" : {
"name" : "retacnyue",
"email" :"zhenhuayue@sina.com"
},
"comments" : [
{
"name" :"retacn",
"email" :"zhenhuayue@sina.com",
"content" :"nice post"
}
]
}
>
#重复添加,同上
#添加新地址时为了不重复,可以作如下操作
#添加邮件数组
>db.users.update({"username":"retacn yue"},{$push:{"emails":"zhenhuayue@sina.com"}})
WriteResult({ "nMatched" : 1,"nUpserted" : 0, "nModified" : 1 })
#查询
> db.users.findOne()
{
"_id" : ObjectId("586b40507dfc144b68de4071"),
"relationships" : {
"enemies" : 2,
"friend" : 32
},
"username" : "retacn yue",
"age" : 33,
"sex" : "male",
"location" : "ZiBo",
"emails" : [
"zhenhuayue@sina.com"
]
}
#更新邮件数组
> db.users.update({"username":"retacnyue"},{"$addToSet":{"emails":"loveyou.for.ever@163.com"}})
WriteResult({ "nMatched" : 1,"nUpserted" : 0, "nModified" : 1 })
> db.users.findOne()
{
"_id" : ObjectId("586b40507dfc144b68de4071"),
"relationships" : {
"enemies" : 2,
"friend" : 32
},
"username" : "retacn yue",
"age" : 33,
"sex" : "male",
"location" : "ZiBo",
"emails" : [
"zhenhuayue@sina.com",
"loveyou.for.ever@163.com"
]
}
添加多个不同的值,使用addToSet和each组合,示例代码如下:
#查询记录
> db.users.findOne()
{
"_id" : ObjectId("586b40507dfc144b68de4071"),
"relationships" : {
"enemies" : 2,
"friend" : 32
},
"username" : "retacn yue",
"age" : 33,
"sex" : "male",
"location" : "ZiBo"
}
#使用addToSet和each组合,添加多个不同的值
>db.users.update({"_id":ObjectId("586b40507dfc144b68de4071")},{"$addToSet":{"emails":{"$each":["zhenhuayue@163.com","zhenhuayue@yahoo.com"]}}})
WriteResult({ "nMatched" : 1,"nUpserted" : 0, "nModified" : 1 })
#查看更新后内容
> db.users.findOne()
{
"_id" : ObjectId("586b40507dfc144b68de4071"),
"relationships" : {
"enemies" : 2,
"friend" : 32
},
"username" : "retacn yue",
"age" : 33,
"sex" : "male",
"location" : "ZiBo",
"emails" : [
"zhenhuayue@163.com",
"zhenhuayue@yahoo.com"
]
}
>
删除数组元素
#从数组未尾删除
>db.users.update({"_id":ObjectId("586b40507dfc144b68de4071")},{$pop:{"emails":1}})
WriteResult({ "nMatched" : 1,"nUpserted" : 0, "nModified" : 1 })
> db.users.findOne()
{
"_id" : ObjectId("586b40507dfc144b68de4071"),
"relationships" : {
"enemies" : 2,
"friend" : 32
},
"username" : "retacn yue",
"age" : 33,
"sex" : "male",
"location" : "ZiBo",
"emails" : [
"zhenhuayue@163.com",
"zhenhuayue@yahoo.com",
"zhenhuayue@hotmail.com"
]
}
#从数组头部删除
>db.users.update({"_id":ObjectId("586b40507dfc144b68de4071")},{$pop:{"emails":-1}})
WriteResult({ "nMatched" : 1,"nUpserted" : 0, "nModified" : 1 })
> db.users.findOne()
{
"_id" : ObjectId("586b40507dfc144b68de4071"),
"relationships" : {
"enemies" : 2,
"friend" : 32
},
"username" : "retacn yue",
"age" : 33,
"sex" : "male",
"location" : "ZiBo",
"emails" : [
"zhenhuayue@yahoo.com",
"zhenhuayue@hotmail.com"
]
}
删除特定条件元素,会将所有匹配的删除
>db.users.update({"_id":ObjectId("586b40507dfc144b68de4071")},{"$pull":{"emails":"zhenhuayue@yahoo.com"}})
WriteResult({ "nMatched" : 1,"nUpserted" : 0, "nModified" : 1 })
> db.users.findOne()
{
"_id" : ObjectId("586b40507dfc144b68de4071"),
"relationships" : {
"enemies" : 2,
"friend" : 32
},
"username" : "retacn yue",
"age" : 33,
"sex" : "male",
"location" : "ZiBo",
"emails" : [
"zhenhuayue@hotmail.com"
]
}
数组的定位修改器
> db.blog.posts.findOne()
{
"_id" : ObjectId("586f21115da1e3bac2c373fe"),
"title" : "A blog post",
"content" : "...",
"author" : {
"name" : "retacnyue",
"email" :"zhenhuayue@sina.com"
},
"comments" : [
{
"name" :"yue",
"email" :"zhenhuayue@126.com",
"content" :"good",
"votes" : 10
},
{
"name" :"three",
"email" :"zhenhuayue@hotmail.com",
"content" :"better",
"votes" : 8
},
{
"name" :"zhenhua",
"email" :"zhenhuayue@qq.com",
"content" :"best",
"votes" : 11
}
]
}
#增加第一个评论的投票数
>db.blog.posts.update({"title":"A blogpost"},{"$inc":{"comments.0.votes":1}})
WriteResult({ "nMatched" : 1,"nUpserted" : 0, "nModified" : 1 })
> db.blog.posts.findOne()
{
"_id" : ObjectId("586f21115da1e3bac2c373fe"),
"title" : "A blog post",
"content" : "...",
"author" : {
"name" : "retacnyue",
"email" :"zhenhuayue@sina.com"
},
"comments" : [
{
"name" :"yue",
"email" :"zhenhuayue@126.com",
"content" :"good",
"votes" : 11
},
{
"name" :"three",
"email" :"zhenhuayue@hotmail.com",
"content" :"better",
"votes" : 8
},
{
"name" :"zhenhua",
"email" :"zhenhuayue@qq.com",
"content" :"best",
"votes" : 11
}
]
}
>
修改器的速度,示例代码如下:
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2017/1/6 17:48# @Author : Retacn# @Site : 测试修改器速度# @File : modifier.py# @Software: PyCharm__author__ = "retacn"__copyright__ = "property of mankind."__license__ = "CN"__version__ = "0.0.1"__maintainer__ = "retacn"__email__ = "zhenhuayue@sina.com"__status__ = "Development"from pymongo import MongoClientimport timeclient=MongoClient()client.drop_database("updates")db=client.updatescollection=db.foo#collection.insert({'x':1})collection.insert({'u':1})collection.find_one()print(collection.find_one())start=time.time()for i in range(100000): #运行结果66.67881393432617 #collection.update({},{"x":1}) #运行结果660 collection.update({},{'$push':{'x':1}})collection.find_one()print(time.time()-start)print(collection.find_one())
更新时开启upsert选项
如果没有文档符合条件,就会以这个条件和更新为基础创建一个新的文档
Db.users.update({“username”:”retacn”},{“$inc”:{“count”:1}},true)
Save是shell的一个函数,在文档不存在时插入,存在时更新
更新多个文档
将update的第四个参数设为true
返回已更新的文档
#表示每个进程状态的文档
{
“_id”:..
“status”:.. //READY RUNNING DOWN
“priority”:..
}
Ps=db.runCommond({“findAndModify”:”processes”,”query”:{“status”:”READY”},”sort”:{“priority”:-1},”update”:{“$set”:{“status”:”RUNNING”}}})
瞬间完成
安全操作
即是线程安全的
像java python ruby 中使用连接池,如果插入和查找不在同一个连接中,会不同步
- MongoDB学习笔记《二》
- MongoDB学习笔记<二>
- MongoDB 学习笔记二
- Mongodb学习笔记(二)
- mongoDB学习笔记二
- mongodb学习笔记二
- MongoDB学习笔记(二) MongoDB常用命令
- MongoDB学习笔记(二) MongoDB基本使用
- Mongodb学习笔记二(Mongodb基本命令)
- Mongodb学习笔记二(Mongodb基本命令)
- Mongodb学习笔记二:常用命令
- Mongodb学习笔记速记(二)
- MongoDB学习笔记(二)
- MongoDB学习笔记(二)
- 学习《Mongodb权威指南》学习笔记 (二)
- MongoDB 学习笔记(二) 之查询
- MongoDB学习笔记(二)(查询)
- mongoDB学习笔记--shell基本语法(二)
- NFS实践及自动挂载问题
- 备案期间网站是否能正常访问
- Android L SystemUI 流程简要分析
- 你怎样看待梁定郊的贿谢之行.
- java并发库之Executors常用的创建ExecutorService的几个方法说明
- mongoDB学习笔记二
- HM编码器代码阅读(29)——码率控制
- java的锁机制
- Spotlight 监控工具使用
- kafka+zookeeper入门搭建
- 2. 命令 tar
- java读取.properties配置文件的几种方法
- iOS9 HTTP 不能正常使用的解决办法
- 高级指针