Nest JS / MongoDB - 地理空间索引在部署的服务器上不起作用
Posted
技术标签:
【中文标题】Nest JS / MongoDB - 地理空间索引在部署的服务器上不起作用【英文标题】:Nest JS / MongoDB - geospatial index not working on deployed server 【发布时间】:2021-10-23 23:24:59 【问题描述】:我正在用 NestJS 编写一个 API,它获取存储在 MongoDB 数据库中的数据并使用 GraphQL 将其返回。它应该使用名为location
的属性获取Devices
- 一个GeoJSON 点。上面还有一个2dsphere
索引,它允许使用$geoNear
查询在一个圆圈中搜索Devices
。在本地机器上一切正常,但是当 API 部署在服务器上时,在循环中查询 Devices
不会返回任何记录,尽管存在记录和索引。
搜索查询如下所示:
const location = [input.center.lng, input.center.lat]
return [
$geoNear:
near:
type: 'Point',
coordinates: location
,
distanceField: 'distance',
maxDistance: input.radius,
key: 'location'
]
DevicesService 使用此管道:
数据库使用 Kubernetes 部署。这是配置:
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.22.0 (955b78124)
creationTimestamp: null
labels:
io.kompose.service: v3-ds-mongo
name: v3-ds-mongo
spec:
replicas: 1
selector:
matchLabels:
io.kompose.service: v3-ds-mongo
strategy:
type: Recreate
template:
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.22.0 (955b78124)
creationTimestamp: null
labels:
io.kompose.service: v3-ds-mongo
spec:
containers:
- env:
- name: MONGO_INITDB_ROOT_PASSWORD
value: password
- name: MONGO_INITDB_ROOT_USERNAME
value: root
image: mongo:latest
name: v3-ds-mongo
ports:
- containerPort: 27017
resources:
volumeMounts:
- mountPath: /data/db
name: v3-ds-mongo-claim0
restartPolicy: Always
volumes:
- name: v3-ds-mongo-claim0
persistentVolumeClaim:
claimName: v3-ds-mongo-claim0
status:
提前感谢您的帮助。
【问题讨论】:
【参考方案1】:索引也应该在服务器上创建,您可以手动执行但效率不高,但是您可以为数据库创建一个初始化文件来定义索引:
connection = new Mongo();
db = connection.getDB("database_name")
db.users.createIndex( location: '2dsphere' )
并在您的配置中引用该文件
【讨论】:
以上是关于Nest JS / MongoDB - 地理空间索引在部署的服务器上不起作用的主要内容,如果未能解决你的问题,请参考以下文章