Установка TTL (expireAfterSeconds) для объекта created_timestamp внутри моего массива

Итак, у меня есть коллекция монго под названием «abcd», внутри моей коллекции я создаю индексы под названием «токен». Я понимаю, что TTL необходимо привязать к объекту даты и времени ISO в монго как индекс или как часть массива.

Мне не удалось добиться истечения срока действия токена при добавлении индекса к моему «токену». Поэтому я добавляю объект даты created_timestamp ISO в свой массив «данных» моего индекса токена.

Мой вопрос в том, как я могу использовать свой атрибут expireAfterSeconds=10 для объекта created_timestamp моего массива данных. Моя цель - удалить весь индекс токена через 10 секунд. Вот json того, как выглядит мой документ «токен»:

{
"_id" : ObjectId("5a7dec4189284441fe9aa1fc"),
"token" : "RfAQ3W",
"data" : "{\"token\": {\"user_id\": 308, \"exp\": 151821111, \"team_code\": 1022, \"created_timestamp\": \"2018-02-09T18:45:24.823785\}}"

}

Я хочу иметь возможность истечь срок действия моего токена через 10 секунд с created_timestamp, которая является датой ISO, когда токен генерируется в mongodb

Я использую: Pymongo 3.4 Mongoengine 0.13 Python 2.7


person locodev123    schedule 09.02.2018    source источник


Ответы (1)


Почему бы вам не создать новое поле 'created_at' со значением Date() и не сделать его индексом TTL вместо того, чтобы помещать его в массив?

Ведь весь этот документ будет удален через 10 сек.

person Rakesh Gupta    schedule 10.02.2018
comment
Могу ли я установить атрибут expireAfterSeconds для функции collection.insert()? - person locodev123; 12.02.2018
comment
Согласно документам mongo, я могу использовать эту функцию ttl только при использовании create_index(). проблема в том, что мое приложение не использует create_index, а вставляет - person locodev123; 12.02.2018
comment
@locodev123 Вам просто нужно создать индекс один раз. Не беспокойтесь об этом после этого. Вы можете вставить тогда нормально - person Rakesh Gupta; 12.02.2018
comment
когда я создаю свой индекс следующим образом: c.create_index('token', expireAfterSeconds=20) Мои токены, которые я генерирую, не удаляются из базы данных через 20 секунд.. - person locodev123; 12.02.2018
comment
Используйте MongoDb Compass для удобного взаимодействия с вашей базой данных с помощью графического интерфейса. Это очень полезно - person Rakesh Gupta; 12.02.2018
comment
c - это объект коллекции, у меня есть это внутри условной проверки, если c = self.db.create_collection(self.collection_name), если коллекция не существует, иначе: c.create_index('token', expireAfterSeconds=20) - person locodev123; 12.02.2018