前言:我們創(chuàng)建一個集合,添加測試數(shù)據(jù),并執(zhí)行 mongodb 的地理空間查詢,返回需要的數(shù)據(jù)。
1、通過schema.prisma
, 創(chuàng)建 store
集合
2、通過 prisma/client
,插入 幾條測試數(shù)據(jù)
// 構(gòu)造測試數(shù)據(jù)
createList: async () => {
await prisma.store.createMany({
data: [
{ name: '三里屯MM1', location: { type: 'Point', coordinates: [116.458347, 39.940602] } },
{ name: '西直門GG1', location: { type: 'Point', coordinates: [116.361446, 39.946471] } },
{ name: '東直門MM2', location: { type: 'Point', coordinates: [116.440967, 39.945325] } },
{ name: '天安門MM3', location: { type: 'Point', coordinates: [116.403963, 39.915119] } },
{ name: '三里屯MM4', location: { type: 'Point', coordinates: [116.460054, 39.938063] } },
{ name: '三里屯MM5', location: { type: 'Point', coordinates: [116.461082, 39.944209] } },
{ name: '三里屯MM6', location: { type: 'Point', coordinates: [116.461065, 39.939399] } }
]
})
},
location 的數(shù)據(jù)格式為 GeoJSON
,即地理位置信息的 JSON 表示法。 這里 type 指定類型為 點(diǎn)坐標(biāo)
,coordinates:[]
存放經(jīng)緯度數(shù)值 。 經(jīng)度在前,緯度在后。
3、創(chuàng)建地理空間索引
在 prisma 中,使用 $runCommandRaw()
,輸入原生數(shù)據(jù)庫命令創(chuàng)建索引:
// 創(chuàng)建索引
const createIndexResult = await prisma.$runCommandRaw({
createIndexes: 'store', // 集合名稱
indexes: [{
key: {
"location": "2dsphere" // 索引字段和索引類型; 索引類型指定為 2dsphere
},
name: 'geoIndex' // 索引名稱-自定義
}]
})
或者在 mongosh 中執(zhí)行如下創(chuàng)建地理空間索引
db.store.createIndex( { location: "2dsphere" } )
// store 為我們創(chuàng)建的集合名稱
4、運(yùn)行地理空間查詢命令
a、使用$near
運(yùn)算符查詢,返回符合條件的數(shù)據(jù)。由近到遠(yuǎn)排序。
順利查詢出三里屯附近的 MM !
b、 使用 $genNear
進(jìn)行聚合查詢。添加一些條件,并返回距離中心點(diǎn)的具體距離。
使用 prisma 提供的 aggregateRaw 方法,進(jìn)行原生聚合查詢
distance
返回具體距離
總結(jié):
1、MongoDB 中地理空間數(shù)據(jù)可存儲為 GeoJSON
或者數(shù)組形式[]
。如果是經(jīng)緯度,則經(jīng)度在前,緯度在后。
2、在執(zhí)行地理空間查詢前,需先創(chuàng)建索引,推薦索引類型為2dsphere
3、在 prisma 中如果使用的數(shù)據(jù)庫是 mongodb, 在進(jìn)行原生數(shù)據(jù)庫查詢時,可使用 prisma 提供的$runCommandRaw findRaw aggregateRaw
方法
mongoDB地理空間查詢文檔文章來源:http://www.zghlxwxcb.cn/news/detail-499495.html
文章參考自:https://juejin.cn/post/6981814561598865421 鳴謝~文章來源地址http://www.zghlxwxcb.cn/news/detail-499495.html
到了這里,關(guān)于prisma 結(jié)合 mongodb 查詢地理空間坐標(biāo),實(shí)現(xiàn) “附近的人”功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!