2012-07-05 58 views
0

我们已经有了一个变化在我们的数据模型,我们希望把它应用到所有文件在我们的产品系列之一:MongoDB的:改变文档的结构查询

{ 
    "id":60, 
    "measurement":{ 
    "steps":1274.0 
    }, 
    "date":"2012-05-15T00:00:00Z" 
} 

到:

{ 
    "id":60, 
    "measurement":{ 
     "distance":{ 
      "steps":1274.0} 
     }, 
    "date":"2012-05-15T00:00:00Z" 
} 

本质上,我们想要进一步嵌套字段steps,将其置于distance字段下。

至于measurement.step,我们想measurement.miles转换为measurement.distance.milesmeasurement.minutesmeasurement.time.minutes

任何想法和/或建议,将不胜感激。

回答

4

假设你问如何脚本架构更改,这是不是在这个问题很清楚:我会做这样的事情,除非你有文档结构较多的情况下,或混合情况:

// find all the measurement documents with steps 
db.coll.find({"measurement.steps":{$exists:true}}).forEach(function(doc) {  
    // create a new distance subdoc with the steps 
    doc.measurement.distance = {steps:doc.measurement.steps}; 
    // delete the old steps subdoc 
    delete doc.measurement.steps; 
    // save the document 
    db.coll.save(doc); 
}); 
// find all the measurement documents with miles 
db.coll.find({"measurement.miles":{$exists:true}}).forEach(function(doc) { 
    // create a new distance subdoc with the miles 
    doc.measurement.distance = {miles:doc.measurement.miles}; 
    delete doc.measurement.miles; 
    db.coll.save(doc); 
}); 
// find all the measurement documents with minutes 
db.coll.find({"measurement.minutes":{$exists:true}}).forEach(function(doc) { 
    // create a new time subdoc with the minutes 
    doc.measurement.time = {minutes:doc.measurement.minutes}; 
    delete doc.measurement.minutes; 
    db.coll.save(doc); 
}); 

您可以很容易地在所选的语言/驱动程序中执行相同的操作来确保类型,但在shell中执行操作可能会更快。希望能帮助到你。

+0

它可以缩放大约500万份文件的数据吗? – iamsaksham 2017-01-10 07:44:02