Как установить срок действия отдельных полей в MongoDB по истечении определенного времени с использованием TTL, а не всего документа? - PullRequest
0 голосов
/ 25 октября 2018

Мне нужна помощь / совет для решения следующей проблемы.Я написал программу, которая читает твиты и присуждает пользователю баллы, если в твите есть соответствующее ключевое слово.Затем я сохраняю идентификаторы твитов в базе данных, чтобы пользователь не мог «обмануть» и использовать тот же твит для другой точки.База данных в настоящее время выглядит следующим образом.

{
    "_id": {
        "$oid": "5bd15b68b6a8dfb7b1177dbe"
    },
    "handle": "twitterhandle",
    "member_id": "0000000",
    "points": 3,
    "tweets": [
        "tweet1",
        "tweet2",
        "tweet3"
    ]
}

Каждые 24 часа я бы хотел, чтобы поле твитов сбрасывалось обратно на Нет - однако, я не могу найти способ сделать это с TTL - кажется,Единственный вариант - удалить все поля, а не только те, которые мне нужны.Есть ли способ сделать это с пимонго?

1 Ответ

0 голосов
/ 25 октября 2018

Полагаю, вы можете сделать что-то вроде этого:

TweetSchema :
 {
    "tweet": onlyOneTweet
    "handle": "twitterhandle",
    "member_id": "0000000",
    "points": 3,
     "createdAt":{
        type:Date,
        default:Date.now,
        expires: (60*60*24) // 1 day
    },

Срок действия автоматически удалит все документы, созданные за 24 часа.И вы можете получить все твиты от одного пользователя, так как у вас есть ссылка на memberId.Я не уверен, что вы можете использовать TTL для SubDocument, так как эта функция предназначена для удаления документа.

...