Closed2
PrismaはGeolocationのSearchに未対応なのでmongodb側で対応するメモ
上記のissueの通り、Prismaは長らくGeoLocationに対応していない.
地図上の緯度軽度と半径で検索したいが現状はできない.
一方でMongoDBは2dshpere indexなどで対応している.
そこで、PrismaのfindRawでmongodbのgeosearchを行うものとする.
testSpotのモデルを用意して検索を行う.
- prismaのschemaに下記を定義
type LocationCoordinate {
type String @default("Point")
coordinates Decimal[]
}
model TestSpot {
id String @id @default(auto()) @map("_id") @db.ObjectId
loc LocationCoordinate
title String?
created DateTime? @default(now())
score Int
}
- 上記をもとにprismaを更新.
npx prisma generate
npx prisma db push
- mongoshでcreateIndex
use DBの名前
db.testSpot.createIndex( { loc : "2dsphere" } )
-
データを追加. coordinatesの中身は、lng, lotの順で入れること.
-
Prismaの検索.
const spot = await prisma.testSpot.findRaw({
filter: {
loc: {
$geoWithin: {
$centerSphere: [[139.7389315, 35.6291115], 1 / 1.6 / 3963.2],
},
},
},
});
以上.
このスクラップは2023/05/24にクローズされました