MongoDB не уважает макс за ограниченную коллекцию - PullRequest
0 голосов
/ 08 января 2020

Вот как я создаю коллекцию:

def connect(self):
    self.client = MongoClient(self.ip, self.port)
    try:
        capped = self.max_size != None
        print("capped", capped)
        print("max", self.max_size)
        self.coll = self.client[self.db_name].create_collection(self.coll_name, capped=capped, max=self.max_size)
    except:
        self.coll = self.client[self.db_name][self.coll_name]
    self.coll.create_index([('expireAt', 1)], expireAfterSeconds=0)

Я установил self.max_size на 10.

Затем я попробовал это:

for i in range(20):
    cache.put(i, {'id': i})

Я ожидал увидеть ровно 10 документов в коллекции, но на самом деле все документы 20 находятся в коллекции.

Почему?

Обновление: я запустил следующее в пн go оболочка:

db.getCollection('test').isCapped()

И я получил

ложь

1 Ответ

2 голосов
/ 09 января 2020

Чтобы создать ограниченную коллекцию, вам нужно оба size и max параметры:

conn.test.create_collection('test', capped=True, size=10000, max=5)

for i in range(10):
    conn.test.test.insert_one({'_id': i})

В оболочке mongo:

> db.test.find()
{ "_id" : 5 }
{ "_id" : 6 }
{ "_id" : 7 }
{ "_id" : 8 }
{ "_id" : 9 }

> db.test.isCapped()
true

Если вы попытаетесь создать его без параметра size, он выдаст ошибку:

pymongo.errors.OperationFailure: the 'size' field is required when 'capped' is true

Однако ваш код имеет параметр try...except. Таким образом, он столкнулся с этой ошибкой, а затем перешел к предложению except, так что вы не увидели, что возникла ошибка и не была создана ограниченная коллекция.

...