简体   繁体   中英

Why is my MongoDB aggregation query so slow

I have several IDs (usually 2 or 3) of users whom I need to fetch from the database. Thing is, I also need to know the distance from a certain point. Problem is, my collection has 1,000,000 documents (users) in it, and it takes upwards of 30 seconds to fetch the users.

Why is this happening? When I just use the $in operator for the _id it works fine and returns everything in under 200ms, and when I just use the $geoNear operator it also works fine, but when I use the 2 together everything slows down insanely. What do I do? Again, all I need is a few users with the IDs from the userIds array and their distance from a certain point ( user.location ).

EDIT: Also wanted to mention that when i use $nin instead of $in the query also performs pefrectly. Only $in is causing the problem when combined with $geoNear

const user = await User.findById('logged in users id');
const userIds = ['id1', 'id2', 'id3'];

[
    {
        $geoNear: {
            near: user.location,
            distanceField: 'distance',
            query: {
                _id: { $in: userIds }
            }
        }
    }
]

I found a work-around: i just query by the ID field, and later I use a library to determine the distance of the returned docs from the central point.

Indexing your data could be a solution to your problem. without indexing mongodb has to scan through all documents.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM