zoukankan      html  css  js  c++  java
  • 关于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="1");
    coll.save(value);
    coll.insert(value);
    View Code

      执行脚本之后会发现,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.
    View Code

      于是我猜想这个“_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="1");
    value2 = dict(name="user1",num="1");
    coll.save(value1);
    coll.insert(value2);
    View Code

      正如所料,都插入成功了。后来我又想这样会不会也都成功呢?

    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":"1"});
    coll.insert({"name":"user1","num":"1"});
    View Code

      发现也都成功了。忽然又觉得这个跟自己所说的(”于是我猜想这个“_id"域是我们在创建对象的时候就被分配好了的,而不是在插入mongodb之后,数据库随机分配一个给我们的")有点背道而驰,但我也只好自我安慰说最后一种插入方式“_id”在{}操作的时候便已经被初始化好了。

      也许有人会说可能mongodb有一个自我hash的功能,但是也说不通。这个还真是有点让人困惑呀,我还需要再仔细想想。

  • 相关阅读:
    剑指offer 31.时间效率 整数中1出现的次数(从1到n整数中1出现的次数)
    剑指offer 30.时间效率 连续子数组的最大和
    ElasticSearch 数据路由原理+增删改查内部原理+写一致性原理以及quorum机制
    剑指offer 29.时间效率 最小的K个数
    剑指offer 28.时间效率 数组中出现次数超过一半的数字
    剑指offer 27.分解让复杂问题简单 字符串的排列
    ElasticSearch 并发冲突+悲观锁与乐观锁+基于_version和external version进行乐观锁并发控制
    剑指offer 26.分解让复杂问题简单 二叉搜索树与双向链表
    Spfa+DP【p2149】[SDOI2009]Elaxia的路线
    Dfs【bzoj3252】攻略
  • 原文地址:https://www.cnblogs.com/RainingDays/p/3412172.html
Copyright © 2011-2022 走看看