mongodb地理空间索引是否可以支持包含不仅仅是lat-long数组的对象?

mongodb地理空间索引是否可以支持包含不仅仅是lat-long数组的对象?,mongodb,Mongodb,是否可以在mongodb中对具有如下字段的内容进行地理空间索引: "geometry": [{"latitude": 84.2, "longitude": 24.2,"time":395384351,"status":"Green"},{"latitude": 84.2, "longitude": 24.2, "time":395384352,"status":"Red"},{"latitude": 84.2, "longitude": 24.2, "time":395384353,,"stat

是否可以在mongodb中对具有如下字段的内容进行地理空间索引:

"geometry": [{"latitude": 84.2, "longitude": 24.2,"time":395384351,"status":"Green"},{"latitude": 84.2, "longitude": 24.2, "time":395384352,"status":"Red"},{"latitude": 84.2, "longitude": 24.2, "time":395384353,,"status":"Blue"}]
"geometry": [[lat,lng],[lat,lng],[lat,lng],[lat,lng]]
或者一定是这样的:

"geometry": [{"latitude": 84.2, "longitude": 24.2,"time":395384351,"status":"Green"},{"latitude": 84.2, "longitude": 24.2, "time":395384352,"status":"Red"},{"latitude": 84.2, "longitude": 24.2, "time":395384353,,"status":"Blue"}]
"geometry": [[lat,lng],[lat,lng],[lat,lng],[lat,lng]]

这是肯定的吗?还是不可能呢?

所以我做了一个小测试。以下是我的地理信息收集中的数据:

{ "_id" : ObjectId("536093e9e3c1d506da48a079"), "loc" : [ 120, 110 ] }
{ "_id" : ObjectId("5360940be3c1d506da48a07a"), "loc" : { "lat" : 120, "lng" : 130 } }
{ "_id" : ObjectId("53609422e3c1d506da48a07b"), "loc" : { "latitude" : 120, "lngitude" : 140 } }
{ "_id" : ObjectId("5360942be3c1d506da48a07c"), "loc" : { "latitude" : 120, "lngitude" : 150, "time" : 133232004 } }
为了确保名字不重要,我犯了一些拼写错误。 一旦我使用以下工具建立索引:

db.geo.ensureIndex({loc: "2d"});
我现在可以用$near运算符查找。 如以下文件所述:

数组的值可以是[55.5,42.3]中的数组,也可以是{lng:55.5,lat:42.3}中的嵌入文档

事实证明,当对象中有额外的字段时,就可以了。只要前两个属性是经度和纬度。并给出了正确的结果:

rs0:PRIMARY> db.geo.find({loc: {$near: [120, 150]}});
{ "_id" : ObjectId("5360942be3c1d506da48a07c"), "loc" : { "latitude" : 120, "lngitude" : 150, "time" : 133232004 } }
{ "_id" : ObjectId("53609422e3c1d506da48a07b"), "loc" : { "latitude" : 120, "lngitude" : 140 } }
{ "_id" : ObjectId("5360940be3c1d506da48a07a"), "loc" : { "lat" : 120, "lng" : 130 } }
{ "_id" : ObjectId("536093e9e3c1d506da48a079"), "loc" : [ 120, 110 ] }
此外,当字段上有2d索引时,它将防止插入无效数据,如:

rs0:PRIMARY> db.geo.insert({loc: {str: "string", latitude: 120, lngitude: 140, time: 133232004}} );
WriteResult({
    "nInserted" : 0,
    "writeError" : {
        "code" : 16804,
        "errmsg" : "insertDocument :: caused by :: 16804 location object expected, location array not in correct format"
    }
})
但是,由于索引始终接受第一个字段作为经度,第二个字段作为纬度。您的数据似乎不符合要求