2012-11-12 68 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