2012-12-10 26 views
0

我刚开始学习mongodb,并且还不知道很多。如何在pymongo中禁用'_id'

所以我的代码:

#! /usr/bin/env python2.7 

import pymongo 
import datetime 

class AccountsDB(): 
    def __init__(self): 
     self.store_info() 

    def store_info(self): 
     try: 
      conn = pymongo.Connection('localhost', 27017) 
      db_name = 'accountsdb' 
      coll_name = 'user_info' 

      db = conn[db_name] 
      coll = db[coll_name] 

      print "Successfully connected to '%s'" % db_name 

      for i in xrange(20): 
       post = { 
        'f_name' : 'Sergey', 
        'l_name' : 'Ivanov', 
        'number' : '777-9-777', 
        'user_id': i 
       } 
       coll.insert(post) 

      print "Done" 
     except: 
      print "Can't connect to the database" 


if __name__ == "__main__": 
    acc = AccountsDB() 

,这让我:

> db.user_info.find() 
{ "_id" : ObjectId("50c64872bdbff34435192a94"), "l_name" : "Ivanov", "f_name" : "Sergey", "user_id" : 0, "number" : "777-9-777" } 
{ "_id" : ObjectId("50c64872bdbff34435192a95"), "l_name" : "Ivanov", "f_name" : "Sergey", "user_id" : 1, "number" : "777-9-777" } 
{ "_id" : ObjectId("50c64872bdbff34435192a96"), "l_name" : "Ivanov", "f_name" : "Sergey", "user_id" : 2, "number" : "777-9-777" } 
{ "_id" : ObjectId("50c64872bdbff34435192a97"), "l_name" : "Ivanov", "f_name" : "Sergey", "user_id" : 3, "number" : "777-9-777" } 
{ "_id" : ObjectId("50c64872bdbff34435192a98"), "l_name" : "Ivanov", "f_name" : "Sergey", "user_id" : 4, "number" : "777-9-777" } 
{ "_id" : ObjectId("50c64872bdbff34435192a99"), "l_name" : "Ivanov", "f_name" : "Sergey", "user_id" : 5, "number" : "777-9-777" } 

and so on.... 

但我想摆脱 '_id',并使用 'user_ID的',而不是作为我的主键。我很确定它可以完成,但不知道如何。

回答

1

我很肯定答案是否定的,你不能禁用“_id”。为什么? 只是看看source code of pymongo。看看collection.py并搜索“_id”。

嗯我认为这可以通过猴子修补来完成,但它的黑暗魔法。只是一个想法,我不推荐猴子补丁。这就是为什么我的答案是否定:(

+0

所以我应该只使用'user_id',而忘记了'_id'? – Vor

+0

当我说没有我意思是你不能禁用“_id”,但如果你能忍受它,你可以同时拥有“user_id”和“_id”。但pymongo使用_id存储对象 – llazzaro

+0

ohh另一种方式是叉pymongo实现你需要和发送拉请求:)。或更好的首先要求这个到pymongo ppl – llazzaro

1

这样做:

post = { 
      'f_name' : 'Sergey', 
      'l_name' : 'Ivanov', 
      'number' : '777-9-777', 
      '_id': i 
} 

用MongoDB的,你只需要使用“_id”作为价值的关键,它会使用你提供的,而不是自动的价值生成一个。

或者,只是创建USER_ID另一个指标并将其标记为“独一无二”

db.collection.createIndex({"user_id":1}, {unique:true}) 
+0

我想他想用'user_id'而不是'_id' – llazzaro

+0

非常感谢 – Vor

+0

@llazaro它不能完成,因为_id的存在是在服务器端强制执行的。但是,您可以自由地在任何字段上创建其他唯一索引:http://www.mongodb.org/display/DOCS/Indexes – mpobrien

相关问题