2012-11-12 104 views
1

我目前正在將數據提取到MongoDB中,並且稍後需要將這些數據提取到單獨的應用程序中。此應用程序要求_id字段爲32位整數。如何設置_id爲32位整數?

確保將結果文檔中的_id屬性顯式設置爲唯一的32位整數。 source

我正在使用pymongo將文檔插入到集合中。

def parse_tweet(in_t): 
    t = {} 
    t["text"] = in_t["text"] 
    t["shape"] = in_t["coordinates"]["coordinates"][0], in_t["coordinates"]["coordinates"][1] 
    return t 

這給了我預期的文件:

{ 
    "_id" : ObjectId("50a0de04f26afb14f4bba03d"), 
    "text" : "hello world", 
    "shape" : [144.9557834, -37.8208589], 
} 

我如何能明確設置_id值是一個32位整數?
我不打算存儲超過600萬個文檔。

回答

2

只需生成一個id並傳給它。 Id可以是任何東西(數組除外)。

def parse_tweet(in_t): 
    t = {} 
    t["_id"] = get_me_an_int32_id 
    t["text"] = in_t["text"] 
    t["shape"] = in_t["coordinates"]["coordinates"][0], in_t["coordinates"]["coordinates"][1] 
    return t 

你必須自己照顧它的獨特性。 MongoDB只會確保你不存儲重複的值。但是,如果您獲得獨特的價值 - 那就是您的問題。

以下是一些想法:How to make an Autoincrementing field

+0

pymongo可能會以不同的方式處理(我是PHP),因爲這不在文檔中:http://api.mongodb.org/python/current/api/index.html但是MongoDB的默認存儲不是一個嚴格的int 32,因爲如果你的應用程序不是用來處理這個問題的話,可能會破壞,因爲我會確保它使用http://php.net/manual/en/class.mongoint32.php的Equiviliant或者只是編碼應用程序來處理Mongo的這個輕微方面 – Sammaye

+0

您可以共享get_me_an_int32_id函數中的某些邏輯嗎?我看着你的鏈接,但不知道在最優雅的計數器爲Python? – Simon

+1

如果你能控制應用程序,最好的方法是編寫應用程序,使用'int()'函數將從MongoDB收集的所有數據轉換爲安全整數,如下所示:http://stackoverflow.com/questions/3387655 /最安全的路到轉換-float到整數中的Python – Sammaye