关于python中使用mongodb模块,save和insert的小问题
今天写python脚本的时候发现这样一个问题:
import os , string , datetime ,pymongo;
conn = pymongo.Connection("127.0.0.1",27017);
db = conn.nn;
coll = db.nn_res;
value = dict(name="user1",num="");
coll.save(value);
coll.insert(value);
执行脚本之后会发现,save和insert只执行了一条,而且跟insert和save出现的先后顺序没有关系,然后我去查看官网上关于save和insert的说明,发现save的部分解释是这样的:
db.collection.save(document) Updates an existing document or inserts a new document, depending on its document parameter. The save() method takes the following parameter:
Parameter Type Description
document document A document to save to the collection. If the document does not contain an _id field, then the save() method performs an insert. During the operation, mongod will add to the document the _id field and assign it a unique ObjectId. If the document contains an _id field, then the save() method performs an upsert, querying the collection on the _id field. If a document does not exist with the specified _id value, the save() method performs an insert. If a document exists with the specified _id value, the save() method performs an update that replaces all fields in the existing document with the fields from the document.
于是我猜想这个“_id"域是我们在创建对象的时候就被分配好了的,而不是在插入mongodb之后,数据库随机分配一个给我们的,于是我这样做:
import os , string , datetime ,pymongo;
conn = pymongo.Connection("127.0.0.1",27017);
db = conn.nn;
coll = db.nn_res;
value1 = dict(name="user1",num="");
value2 = dict(name="user1",num="");
coll.save(value1);
coll.insert(value2);
正如所料,都插入成功了。后来我又想这样会不会也都成功呢?
import os , string , datetime ,pymongo;
conn = pymongo.Connection("127.0.0.1",27017);
db = conn.nn;
coll = db.nn_res;
coll.save({"name":"user1","num":""});
coll.insert({"name":"user1","num":""});
发现也都成功了。忽然又觉得这个跟自己所说的(”于是我猜想这个“_id"域是我们在创建对象的时候就被分配好了的,而不是在插入mongodb之后,数据库随机分配一个给我们的")有点背道而驰,但我也只好自我安慰说最后一种插入方式“_id”在{}操作的时候便已经被初始化好了。
也许有人会说可能mongodb有一个自我hash的功能,但是也说不通。这个还真是有点让人困惑呀,我还需要再仔细想想。
关于python中使用mongodb模块,save和insert的小问题的更多相关文章
- Python中的random模块,来自于Capricorn的实验室
Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...
- Python中的logging模块
http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stack ...
- Python中的random模块
Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...
- 浅析Python中的struct模块
最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概了解了,在这里做一下简单的总结. 了解c语言 ...
- python中的StringIO模块
python中的StringIO模块 标签:python StringIO 此模块主要用于在内存缓冲区中读写数据.模块是用类编写的,只有一个StringIO类,所以它的可用方法都在类中.此类中的大部分 ...
- python中的select模块
介绍: Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kqu ...
- Python中的re模块--正则表达式
Python中的re模块--正则表达式 使用match从字符串开头匹配 以匹配国内手机号为例,通常手机号为11位,以1开头.大概是这样13509094747,(这个号码是我随便写的,请不要拨打),我们 ...
- python中的shutil模块
目录 python中的shutil模块 目录和文件操作 归档操作 python中的shutil模块 shutil模块对文件和文件集合提供了许多高级操作,特别是提供了支持文件复制和删除的函数. 目录和文 ...
- Python中使用operator模块实现对象的多级排序
Python中使用operator模块实现对象的多级排序 今天碰到一个小的排序问题,需要按嵌套对象的多个属性来排序,于是发现了Python里的operator模块和sorted函数组合可以实现这个功能 ...
随机推荐
- 【转】并查集&MST题集
转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU]1213 How Many Tables 基础并查集★1272 小希的迷宫 基 ...
- oracle 条件:1=1或1=0,动态添加条件
看到where语句中有条件:where 1=1 和 1=2或1<>1 用途: 1=1:是为了添加条件时使用and并列其他条件时使用的(动态连接后续条件) 比如: ...
- [原] perforce 获取本地最近更新的Changelist
获取perforce客户端最后一次sync的changelist, 前提是中间没有任何代码提交: http://stackoverflow.com/questions/47007/determinin ...
- intellij idea 14 ULTIMATE 注册码
Name:happy KEY:63763-YCO0I-QR4TV-G4I3E-4XGK9-GQSQ3
- Corner case
A corner case (or pathological case) is a problem or situation that occurs only outside of normal op ...
- HDU 1546 Idiomatic Phrases Game(最短路,Dijsktra,理解题意很重要)
题目 1.注意因为要判断能不能到达,所以要在模版里面判断k有没有更新. 2.看懂题目意思和案例的解法很重要. #define _CRT_SECURE_NO_WARNINGS //题目大意:现要进行单词 ...
- 使用Flexible实现手淘H5页面的终端适配【转】
曾几何时为了兼容IE低版本浏览器而头痛,以为到Mobile时代可以跟这些麻烦说拜拜.可没想到到了移动时代,为了处理各终端的适配而乱了手脚.对于混迹各社区的偶,时常发现大家拿手机淘宝的H5页面做讨论—— ...
- PowerDesigner修改设计图中文字的字体大小等样式
设计图中默认的字体是对英文比较合适的,中文就看不清楚了,特别不美观.但是可以通过修改“Display Preferences”适应我们的汉字. 我使用的PowerDesigner版本是15.1(测试版 ...
- mysql InnoDB 索引小记
0.索引结构 1).MyISAM与InnoDB索引结构比较,如下: 2).MyISAM的索引结构 主键索引和二级索引结构很像,叶子存储的都是索引以及数据存储的物理地址,其他节点存储的仅仅是索引信息.其 ...
- Java学习笔记之:java运算符
一.介绍 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算 ...