Skip to content

Index on default field not created correctly #6834

Open
@sunshineo

Description

@sunshineo
Contributor
  • This isn't a vulnerability disclosure, if it is please follow our security policy.

    You're running version >=2.3.2 of Parse Server, we can't accept issues for very outdated releases, please update to a newer version.

    This isn't a question, if you need if you have questions about code please use Stack Overflow with the parse-platform tag & other questions can be posted on the community forum.

    You've searched through existing issues, your issue may have been reported or resolved before.

Discussion started on https://community.parseplatform.org/t/how-to-add-index-on-createdat-and-updatedat-if-possible/586/5 @davimacedo and I feel this is a bug

We tried to add an index to createdAt by post to /schemas/${className}

    indexes: {
            _createdAt_: {
                createdAt: 1
            },
            _updatedAt_: {
                updatedAt: 1
            }
        }

The post worked. Looking at the MongoDB it seems the indexes are created but on MongoDB it is _created_at and _updated_at. So the index does not work.

image

We tried to do the following but got an error

{
    indexes: {
            _created_at_: {
                _created_at: 1
            },
            _updated_at_: {
                _updated_at: 1
            }
        }
}
{
    “code”: 102,
    “error”: “Field _created_at does not exist, cannot add index.”
}

Environment Setup

  • Server

    • parse-server version (Be specific! Don't say 'latest'.) : 2.11.0
    • Operating System: Mac
    • Hardware: Mac
    • Localhost or remote server? Localhost
  • Database

    • MongoDB version: 4.2.8
    • Localhost or remote server? Mongo Atlas

Activity

mtrezza

mtrezza commented on Jul 27, 2020

@mtrezza
Member

Thank you for reporting.

@davimacedo If I may, I tag you here so you can follow along the continued conversation from the Community Forum.

changed the title [-]createdAt and updatedAt not converted to _created_at and _updated_at when add index[/-] [+]Index on default field not created correctly[/+] on Jul 28, 2020
mtrezza

mtrezza commented on Jul 28, 2020

@mtrezza
Member

It seems that the test case expects the result you describe:

request({
url: 'http://localhost:8378/1/schemas/NewClass',
method: 'PUT',
headers: masterKeyHeaders,
json: true,
body: {
indexes: {
name1: { createdAt: 1 },
},
},
}).then(response => {
expect(response.data.indexes.name1).toEqual({ createdAt: 1 });

The correct expected result should be an index { _created_at: 1 }, unless we transform the indices from internal to non-internal form in the response.

Parse Server internal field names are rarely exposed and for example in the dashboard displayed in the non-internal form. So to not confuse the developer I suggest that the index request should also be the non-internal field name (createdAt instead of the internal form _created_at). It is also the form that has been tried intuitively first, according to the post.

I will add a PR that transforms the index field names from non-internal to internal form, so the correct request will be:

indexes: {
    _createdAt_: {
        createdAt: 1
    },
    _updatedAt_: {
        updatedAt: 1
    }
}
linked a pull request that will close this issue on Jul 28, 2020
added
type:bugImpaired feature or lacking behavior that is likely assumed
and removed on Jul 28, 2020
uzaysan

uzaysan commented on Aug 8, 2020

@uzaysan

May i ask, if i create indexes directly in mongo console or mongo compass, it will work right?

mtrezza

mtrezza commented on Aug 10, 2020

@mtrezza
Member

Yes. Whether an index is used for a query is determined by the MongoDB query planner (unless otherwise specified), so once an index exists in MongoDB, it will be available to the query planner.

stale

stale commented on Nov 8, 2020

@stale

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

guiquintelas

guiquintelas commented on Oct 7, 2022

@guiquintelas

would love to have this issue fixed :/

added
bounty:$20Bounty applies for fixing this issue (Parse Bounty Program)
on Oct 7, 2022
badboy-tian

badboy-tian commented on Dec 18, 2023

@badboy-tian
export const ArticleFm = {
    className: "ArticleFm",
    fields: {
        image: {type: "Pointer", targetClass: "AVFile"},
        name: {type: "String"},
        size: {type: "Number"},
        type: {type: "Number"},
    },
    indexes: {
        ArticleFm_createdAt_Index: {_created_at: 1},
    },
    classLevelPermissions: {
        find: {},
        count: {},
        get: {},
        update: {},
        create: {},
        delete: {},
        protectedFields: {},
    },
}
[TS] error: Failed to run migrations: Error during update of schema for type ArticleFm: ParseError: 102 Field _created_at does not exist, cannot add index.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bounty:$20Bounty applies for fixing this issue (Parse Bounty Program)type:bugImpaired feature or lacking behavior that is likely assumed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @sunshineo@badboy-tian@mtrezza@guiquintelas@uzaysan

      Issue actions

        Index on default field not created correctly · Issue #6834 · parse-community/parse-server