MongoDB:使用来自同一文档的数据更新文档

标签 mongodb

我有一个文档列表,每个文档都有 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.latdb.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/

相关文章:

node.js - Mongoose 的 typescript 声明文件

java - 如何使用 Java 将带有一些数据的图像存储在 MongoDB 中

node.js - Expressjs 中的 Nodemailer 出错?

用于匹配 MongoDB 字符串的正则表达式

javascript - MongoDB引用错误: Schema is not defined

php - 如何获得旧版本的 mongodb?

mongodb - Mongod 无法识别 yaml 配置中的 net.http?

node.js - 错误: Cannot find module './models/modela'

arrays - 如何使用go从mongoDB数组中获取所有元素?

javascript - 限制下载次数