-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Description
Describe the Bug
When using the near operator to search for nearby locations, the actual search area is much smaller than the distance we provide in meters. Our 8-mile search only finds things within about 6 miles.
This issue only happens with the PostgreSQL adapter. We confirmed that MongoDB works correctly using the exact same query and data.
Link to the code that reproduces this issue
https://github.com/alishahlakhani/pg-bug
Reproduction Steps
- Use the Payload Postgres adapter.
- Seed with the following data: Create a collection with a point field and add two test items:
[
{
id: 1,
name: 'Downtown Clinic - 3.5m',
coordinates: [-74.0059, 40.7128 + 0.0505], // ~3.489 miles
createdAt: '2025-10-20T10:20:00.000Z',
updatedAt: '2025-10-20T10:20:00.000Z',
},
{
id: 2,
name: 'Downtown Clinic - 6m',
coordinates: [-74.0059, 40.7128 + 0.0905], // ~6.253 miles
createdAt: '2025-10-20T10:20:00.000Z',
updatedAt: '2025-10-20T10:20:00.000Z',
},
{
id: 3,
name: 'Downtown Clinic - 10m',
coordinates: [-74.0059 - 0.15818, 40.7128 + 0.0905], // ~10.375 miles
createdAt: '2025-10-20T10:20:00.000Z',
updatedAt: '2025-10-20T10:20:00.000Z',
},
{
id: 4,
name: 'Downtown Clinic - 21m',
coordinates: [-74.0059 - 0.15818, 40.7128 + 0.2905], // ~21.707 miles
createdAt: '2025-10-20T10:20:00.000Z',
updatedAt: '2025-10-20T10:20:00.000Z',
},
{
id: 5,
name: 'Downtown Clinic - 56m',
coordinates: [-74.0059 - 0.85818, 40.7128 + 0.4905], // ~56.16 miles
createdAt: '2025-10-20T10:20:00.000Z',
updatedAt: '2025-10-20T10:20:00.000Z',
},
{
id: 6,
name: 'Downtown Clinic - 85m',
coordinates: [-74.0059 - 0.99818, 40.7128 + 0.9805], // ~85.33 miles
createdAt: '2025-10-20T10:20:00.000Z',
updatedAt: '2025-10-20T10:20:00.000Z',
},
]- Query: After hitting this API on postman via 8-mile radius (12,874.8 meters)
http://localhost:3000/api/map?where[coordinates][near]=-74.0059,40.7128,12874.8
We should technically get 2 points(id:1 and id: 2) but the query only returns 1(3.5 miles) while 2(6.3 miles) is missing, even though it's well within the 8-mile search radius.
We tested this by using Mongodb adapter and it works flawlessly but for PG its failing. After checking with ✌️AI✌️ we found out that its a distance calculation issue. After we multiply the query's near value by 1.32 it works. Is this normal? We had to use beforeRead hook to sort this out for now but I believe CMS should solve this appropriately.
Which area(s) are affected? (Select all that apply)
db: postgres
Environment Info
Binaries:
Node: 22.7.0
npm: 10.8.2
Yarn: N/A
pnpm: 10.18.0
Relevant Packages:
payload: 3.58.0
Operating System:
Platform: darwin
Arch: arm64
Version: Darwin Kernel Version 25.0.0: Wed Sep 17 21:41:45 PDT 2025; root:xnu-12377.1.9~141/RELEASE_ARM64_T6000
Available memory (MB): 16384
Available CPU cores: 10