我们对数据模型进行了更改,并希望将其应用于我们的一个集合中的所有文档:
{
"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.miles
,将measurement.minutes
转换为measurement.time.minutes
。
任何想法和/或建议都将不胜感激。
答案 0 :(得分: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中执行操作可能会更快。希望它有所帮助。