2012-12-10 27 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

相關問題