почему mon goose TTL удаляет документ, даже если частичный фильтр не соответствует опции - PullRequest
0 голосов
/ 26 февраля 2020

мой частичный фильтр удаляет документ, но пользователь не соответствует этому требованию, неправильно ли я использую частичный фильтр?

Спасибо


const postSchema = new mongoose.Schema(
    {
        title: { type: String },
        description: { type: String },
        image: { type: String },
        price: { type: String },
        location: { type: String },
        image: { type: Array },
        author: {
            type: String,
            ref: 'User'
        },
        authorPremium: {
            type: Boolean,
            default: true,
            index:true
        },
        reported: {
            type: Boolean,
            default: false
        },
        reportClear: {
            type: Boolean,
            default: false
        }
    },
    {
        timestamps: true
    }
);

// users who are not premium will have posts deleted after 20 seconds
postSchema.index({ createdAt: 1 }, { expireAfterSeconds: 20, partialFilterExpression: { authorPremium: false } });

module.exports = mongoose.model('Post', postSchema);

частичный файлер не должен позволять удалить authorPremium, который является истинным, но только удалить - authorPremium - ложь ... пожалуйста, сообщите.

return из mon go index

[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_",
                "ns" : "test.posts"
        },
        {
                "v" : 2,
                "key" : {
                        "createdAt" : 1
                },
                "name" : "createdAt_1",
                "ns" : "test.posts",
                "expireAfterSeconds" : 120,
                "background" : true
        },
        {
                "v" : 2,
                "key" : {
                        "authorPremium" : 1
                },
                "name" : "authorPremium_1",
                "ns" : "test.posts",
                "background" : true
        },
        {
                "v" : 2,
                "key" : {
                        "timestamps" : 1
                },
                "name" : "timestamps_1",
                "ns" : "test.posts",
                "expireAfterSeconds" : 20,
                "background" : true
        }
]

кажется, что когда я использую mon go cmd, некоторые из моих старых настроек остались .. а некоторые новые? Итак, как я могу полностью очистить эти старые настройки ttl во время тестирования и убедиться, что там есть только те, которые я хочу?

1 Ответ

0 голосов
/ 26 февраля 2020

Похоже, что ваш .index(...) не работает, потому что у вас уже есть старый индекс в поле createdAt и mon goose не удалит старый. Для синхронизации индексов с вашей схемой вы можете использовать Model.syncIndexes

Подробнее о том, как работает .index() и почему было введено .syncIndexes(), можно узнать здесь .

...