现在需要将“字符串”“解析”为一个有效的数据结构。同样,“latlong”对你来说也是无用的,因为它既是一个“字符串”本身,也是对于MongoDB期望坐标的错误顺序。
所以我们解决这两个:
var bulk = db.cables.initializeOrderedBulkOp(),
count = 0;
db.cables.find({ "description": { "$type": 2 } }).forEach(function(doc) {
doc.description = JSON.parse(doc.description);
doc.description = doc.description.map(function(desc) {
desc.coordinates = desc.latlon.split(",").reverse().map(function(el) {
return parseFloat(el);
});
delete desc.latlong;
return desc;
});
bulk.find({ "_id": doc._id }).updateOne({
"$set": { "description": doc.description }
});
count++;
// Send batch one in 1000
if (count % 1000 == 0) {
bulk.execute();
bulk = db.cables.initializeOrderedBulkOp();
}
});
// Clear any queued
if (count % 1000 != 0)
bulk.execute();
你的猫鼬的模式改成这样:
"description": [{
"landing_point_id": Number,
"coordinates": [],
"name": String
}],
现在你有数据你可以索引和地理空间查询使用。