1

当我创建一个我应该拥有 2dsphere 索引的用户时,我尝试在我的集合中创建一个 2dsphere 索引。

我从这个答案中获取参考Create & Find GeoLocation in mongoose

在我的情况下,我使用的代码是这样的:

DriverSchema.index({ "geometry": "2dsphere"});

但是当我创建一个用户时,我没有看到任何 2dsphere 索引。 在此处输入图像描述

不知道是哪一步错了,希望有人能告诉我。

这是我的架构代码:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const PointSchema = new Schema({
    type: { type: String, default: 'Point'},
    coordinates: { type: [Number], index: '2dsphere'}
});

const DriverSchema = new Schema({
    email: {
        type: String,
        required: true
    },
    driving: {
        type: Boolean,
        default: false
    },
    geometry: PointSchema
});

DriverSchema.index({ "geometry": "2dsphere"});

const Driver = mongoose.model('driver', DriverSchema);

module.exports = Driver;

提前致谢。

4

1 回答 1

2

您需要更新您的架构,如下所示:

coordinates: {
  type: [Number], // <lng, lat>
  index: { type: '2dsphere', sparse: false },
  required: true,
},

在此之后创建一个新记录并Robo 3T像这样签入:

db.hotspot.aggregate([{$indexStats: {}}]);

然后你会得到这个输出:

{
    "name" : "location_2dsphere",
    "key" : {
        "coordinates" : "2dsphere"
    },
    "host" : "neel-Vostro-1450:27017",
    "accesses" : {
        "ops" : NumberLong(0),
        "since" : ISODate("2018-03-11T14:04:12.785Z")
    }
}
于 2018-03-11T15:00:14.883 回答