我使用mongoimport导入csv文件。此数据集具体:
我遇到的问题是description
字段。
[{"landing_point_id":3522,"latlon":"51.898325,-8.472768","name":"Cork, Ireland"}]
我认为这是一个对象数组,所以我正在为它制作一个猫鼬模型:
description: [{
landing_point_id: Number,
latlon: String,
name: String
}],
但是这给了我一个空数组。如果我将description
的类型设置为String
,我会获取值 - 但当然是字符串,因此无法访问属性。
"description" : "[{\"landing_point_id\":8398,\"latlon\":\"52.207114,1.620294\",\"name\":\"Sizewell, United Kingdom\"}]"
因此,当我希望字段description
成为String
时,问题似乎是Array
为db.cables.find().snapshot().forEach(function (el) {
el.description_array = [ el.description ];
db.cables.save(el);
});
。
在这里的答案我试图将它从字符串转换为数组,但没有运气。
"description_array" : [ "[{\"landing_point_id\":8398,│ col10: '',
\"latlon\":\"52.207114,1.620294\",\"name\":\"Sizewell, United Kingdom\"}]" ]
这只是将字符串包装在另一个数组中。
el.description_array = new Array(el.description);
也一样
<div class="list-group" onsubmit="return validateForm()" method='post'
action="thankyou.php">
<a href="#" class="list-group-item active">Specifications</a>
<a href="#" class="list-group-item" type="text" name="car_type"><b>Car Type :</b> 2012 Honda Civic</a>
<a href="#" class="list-group-item" type="text" name="trim"><b>Trim :</b> STANDARD</a>
<a href="#" class="list-group-item" type="text" name="year_made"><b>Year :</b> 2012</a>
<a href="#" class="list-group-item" type="text" name="km"><b>KM :</b> 19,000</a>
<a href="#" class="list-group-item" type="text" name="exterior_color"><b>Exterior Colour :</b> WHITE</a>
<a href="#" class="list-group-item" type="text" name="cost_after_duty"><b>Cost After Duty :</b> $21,960</a>
<a href="#" class="list-group-item" type="text" name="options"><b>OPTIONSB(A/T) :</b> ALLOYS, BLUETOOTH, BODY KIT,
POWER GROUP, KEYLESS REMOTE, BACK UP CAMERA</a>
<a href="#" class="list-group-item" name="percentage_deposite"><b>30% Deposit :</b> </a>
<a class="btn btn-primary btn-lg" href="thankyou.php" type="submit">Make Reservation »</a>
</div>
任何想法如何解决这个问题?
在导入之前可以在csv文件中编辑的东西使mongoimport正确解释它?
答案 0 :(得分:0)
现在需要将“字符串”“解析”为有效的数据结构。另外,“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();
将您的mongoose架构更改为:
"description": [{
"landing_point_id": Number,
"coordinates": [],
"name": String
}],
现在您拥有可以索引的数据并与GeoSpatial查询一起使用。