MongoDB使用现有值更新文档

MongoDB使用现有值更新文档,mongodb,Mongodb,如何使用现有文档自身的值更新该文档 存在包含照片的相册集合,照片网页需要修改以前置现有值 以下是基于答案 下面的代码无法更新Web页值 db.getCollection('Album').find().snapshot().forEach( function (e) { for(var i=0; i<e.photos.length; i++) { e.photos[i].webPath = '/uploads'+e.photos[i].w

如何使用现有文档自身的值更新该文档

存在包含照片的相册集合,照片网页需要修改以前置现有值

以下是基于答案

下面的代码无法更新Web页值

db.getCollection('Album').find().snapshot().forEach(
      function (e) {
        for(var i=0; i<e.photos.length; i++) {
            e.photos[i].webPath = '/uploads'+e.photos[i].webPath;
        }
            db.events.save(e);
    }
)
编辑1

样本相册文档:

{
    "_id" : ObjectId("5923e3eebe37843815248521"),
    "created" : ISODate("2017-05-23T07:25:34.000Z"),
    "photos" : [ 
    {
        "id" : 474,
        "webPath" : "/dir/to.jpg"
    }, 
    {
        "id" : 475,
        "webPath" : "/dir/to.jpg"
    }
    ]
}

您正在保存到错误的集合

在您循环查看照片并更新数据后,您有以下行:

db.events.save(e);
我想您是想保存回您查询的原始集合。但是,这将保存到
事件
集合(如果不存在则创建它),因为以下两行是等效的()。您可能会发现您有一个事件集合,其中充满了修改后的数据

db.foo.save(x);
db.getCollection('foo').save();
相反,您需要确保保存回您要查询的原始集合(“代码>相册”
集合)。在您的情况下,这可以简单地更改为:

db.getCollection('Album').save(e);
您的完整代码段如下所示:

db.getCollection('Album').find().snapshot().forEach(
      function (e) {
        for(var i=0; i<e.photos.length; i++) {
            e.photos[i].webPath = '/uploads'+e.photos[i].webPath;
        }
        db.getCollection('Album').save(e);
    }
)
db.getCollection('Album').find().snapshot().forEach(
职能(e){

对于(var i=0;i您正在保存到错误的集合

在您循环查看照片并更新数据后,您有以下行:

db.events.save(e);
我希望您打算保存回查询的原始集合。但是这是保存到
events
集合(如果它不存在,则创建它),因为以下两行是等效的()。您可能会发现,您的事件集合中充满了修改后的数据

db.foo.save(x);
db.getCollection('foo').save();
相反,您需要确保保存回您要查询的原始集合(相册)。在您的情况下,这可以简单地更改为:

db.getCollection('Album').save(e);
您的完整代码段如下所示:

db.getCollection('Album').find().snapshot().forEach(
      function (e) {
        for(var i=0; i<e.photos.length; i++) {
            e.photos[i].webPath = '/uploads'+e.photos[i].webPath;
        }
        db.getCollection('Album').save(e);
    }
)
db.getCollection('Album').find().snapshot().forEach(
职能(e){

对于(var i=0;为了更好地理解,我展示了您收藏的样本文档发布了您收藏的样本文档以便更好地理解这样一个简单的错误,谢谢。您是对的,我刚刚发现了一个包含大量数据的事件集。很高兴听到-我们都去过:-)。我很高兴能帮你。这是个简单的错误,谢谢。你说得对,我刚刚发现了一个包含大量数据的事件集合。很高兴听到-我们都去过:-)。我很高兴能帮你。