使用pymongo以特定顺序在MongoDB中插入文档

时间:2018-04-06 14:01:21

标签: python database mongodb pymongo

我必须以左移方式在MongoDB中插入文档,即如果集合包含60个文档,我将删除第一个文档,并且我想在数据库的后面插入新文档。但是当我插入第61个元素时,文档将被插入随机位置。 有什么方法可以按照我上面指定的顺序插入文档吗? 或者,当我从数据库中检索值时,是否必须执行此处理?如果是,那怎么样? 数据格式为:

data = {"time":"10:14:23", #timestamp 
         "stats":[<list of dictionaries>]
       } 

我正在使用的代码是

from pymongo import MongoClient
db = MongoClient().test
db.timestamp.delete_one({"_id":db.timestamp.find()[0]["_id"]})
db.timestamp.insert_one(new_data)

时间戳是集合的名称。

编辑:更改了代码。还有更好的办法吗?

from pymongo.operations import InsertOne,DeleteOne

def save(collection,data,cap=60):
    if collection.count() == cap:
        top_doc_time= min(doc['time'] for doc in collection.find())
        collection.delete_one({'time':top_doc_time['_time']})
    collection.insert_one(data)

1 个答案:

答案 0 :(得分:0)

批量写入操作guarantees query ordering by default。 这意味着查询按顺序执行。

from pymongo.operations import DeleteOne, InsertOne


def left_shift_insert(collection, doc, cap=60):
    ops = []
    variance = max((collection.count() + 1) - cap, 0)
    delete_ops = [DeleteOne({})] * variance
    ops.extend(delete_ops)
    ops.append(InsertOne(doc))

    return collection.bulk_write(ops)

left_shift_insert(db.timestamp, new_data)