mongodb 插入 属性 顺序重要吗?
mongoldb insert does the property order matters?
我有一个包含以下索引的集合。
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "bs.locations"
},
{
"v" : 1,
"key" : {
"location" : "2dsphere"
},
"name" : "location_2dsphere",
"ns" : "bs.locations",
"2dsphereIndexVersion" : 2
}
]
我可以插入以下文件:
db.locations.insert({ "location" : {"coordinates" : [ 6.982654547382455, 46.88414220428685 ], "type" : "Point", "test":1.0} })
但是当我尝试插入这个文档时:
db.locations.insert({ "location" : {"test":1.0, "coordinates" : [ 6.982654547382455, 46.88414220428685 ], "type" : "Point"} })
我收到以下错误:
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 16755,
"errmsg" : "Can't extract geo keys: { _id: ObjectId('5566050507c10c31ce7214af'), location: { test: 1.0, coordinates: [ 6.982654547382455, 46.88414220428685 ], type: \"Point\" } } Point must only contain numeric elements"
}
})
我的问题是,我在这里错过了什么?我的错误是什么?
我用的是MongoDB版本v3.0.1
根据 MongoDB 手册 2dsphere 索引有一些字段限制。限制如下:
2dsphere Indexed Field Restrictions Fields with 2dsphere indexes must
hold geometry data in the form of coordinate pairs or GeoJSON data. If
you attempt to insert a document with non-geometry data in a 2dsphere
indexed field, or build a 2dsphere index on a collection where the
indexed field has non-geometry data, the operation will fail.
要成为 GeoJSON
对象,对象应根据以下结构包含 type 和 coordinates 字段:
{ type: "<GeoJSON type>" , coordinates: <coordinates> }
由于 location
被索引为 2dsphere
您的第一个插入查询得到满足,因为它包含文档开头的对。但在第二种情况下,文档结构违反了限制。它期望 type 或 coordinates 从一开始。
根据 MongoDB 手册,这是插入语句情况背后的唯一合乎逻辑的原因。
我有一个包含以下索引的集合。
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "bs.locations"
},
{
"v" : 1,
"key" : {
"location" : "2dsphere"
},
"name" : "location_2dsphere",
"ns" : "bs.locations",
"2dsphereIndexVersion" : 2
}
]
我可以插入以下文件:
db.locations.insert({ "location" : {"coordinates" : [ 6.982654547382455, 46.88414220428685 ], "type" : "Point", "test":1.0} })
但是当我尝试插入这个文档时:
db.locations.insert({ "location" : {"test":1.0, "coordinates" : [ 6.982654547382455, 46.88414220428685 ], "type" : "Point"} })
我收到以下错误:
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 16755,
"errmsg" : "Can't extract geo keys: { _id: ObjectId('5566050507c10c31ce7214af'), location: { test: 1.0, coordinates: [ 6.982654547382455, 46.88414220428685 ], type: \"Point\" } } Point must only contain numeric elements"
}
})
我的问题是,我在这里错过了什么?我的错误是什么?
我用的是MongoDB版本v3.0.1
根据 MongoDB 手册 2dsphere 索引有一些字段限制。限制如下:
2dsphere Indexed Field Restrictions Fields with 2dsphere indexes must hold geometry data in the form of coordinate pairs or GeoJSON data. If you attempt to insert a document with non-geometry data in a 2dsphere indexed field, or build a 2dsphere index on a collection where the indexed field has non-geometry data, the operation will fail.
要成为 GeoJSON
对象,对象应根据以下结构包含 type 和 coordinates 字段:
{ type: "<GeoJSON type>" , coordinates: <coordinates> }
由于 location
被索引为 2dsphere
您的第一个插入查询得到满足,因为它包含文档开头的对。但在第二种情况下,文档结构违反了限制。它期望 type 或 coordinates 从一开始。
根据 MongoDB 手册,这是插入语句情况背后的唯一合乎逻辑的原因。