pymongo - ensureIndex和upserts

时间:2013-05-30 18:20:44

标签: mongodb pymongo

我有一个简单的dict定义了一个基本记录,如下所示:

record = {
    'h': site_hash, #combination of date (below) and site id hashed with md5
    'dt': d,                            # date - YYYYMMDD
    'si': data['site'],                 # site id
    'cl': data['client'],               # client id
    'nt': data['type'],                 # site type
}

然后我调用以下内容来更新记录,如果它不存在以下内容:

collection.update(
    record, 
    {'$inc':updates}, # updates contain some values that increase such as events: 1, actions:1, etc
    True # do upsert
);

我想知道是否将上述内容更改为以下内容,如果它会有更好的性能,因为下面的代码只显示现有的'h'值而不是h / dt / si / cl / nt而且我只需要ensureIndex 'h'字段。但是,显然每次都会执行$ set,从而导致更多的写入记录,而不仅仅是$ inc。

record = {
    'h': site_hash, #combination of date (below) and site id hashed with md5
}
values = {
    'dt': d,                            # date - YYYYMMDD
    'si': data['site'],                 # site id
    'cl': data['client'],               # client id
    'nt': data['type'],                 # site type
}
collection.update(
    record, 
    {'$inc':updates,'$set':values},
    True # do upsert
);

有没有人对这里的最佳做法有任何提示或建议?

1 个答案:

答案 0 :(得分:0)

如果'h'已经是唯一的那么你可以在h上创建一个索引,不需要索引'dt','si'等等。在这种情况下,我希望你的第一个例子在这是一个非常沉重的负担,因为它会在日记中创建较小的条目。