我有一个文档列表,每个文档都有 lat 和 lon 属性(以及其他)。
{ 'lat': 1, 'lon': 2, someotherdata [...] }
{ 'lat': 4, 'lon': 1, someotherdata [...] }
[...]
我想修改它,使它看起来像这样:
{ 'coords': {'lat': 1, 'lon': 2}, someotherdata [...]}
{ 'coords': {'lat': 4, 'lon': 1}, someotherdata [...]}
[...]
到目前为止,我得到了这个:
db.events.update({}, {$set : {'coords': {'lat': db.events.lat, 'lon': db.events.lon}}}, false, true)
但它将 db.events.lat 和 db.events.lon 视为字符串。如何引用文档的属性?
干杯。
最佳答案
更新:如果您只需更改文档的结构而不更改值,请参阅 gipset's answer一个很好的解决方案。
根据对 Update documentation page 的评论(现在不可用) ,您无法从 update()
中引用当前文档的属性。
您必须像这样遍历所有文档并更新它们:
db.events.find().snapshot().forEach(
function (e) {
// update document, using its own properties
e.coords = { lat: e.lat, lon: e.lon };
// remove old properties
delete e.lat;
delete e.lon;
// save the updated document
db.events.save(e);
}
)
这样的函数也可以用于 map-reduce 作业或服务器端 db.eval()
作业,具体取决于您的需要。
关于MongoDB:使用来自同一文档的数据更新文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3788256/