首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用update更改mongodb中对象的模式

使用update更改mongodb中对象的模式
EN

Stack Overflow用户
提问于 2014-05-06 03:31:09
回答 1查看 37关注 0票数 0

我从一个巨大的ms excel表格中导入了csv。因此,集合是一个级别。我需要更改一些列,以便它们是2个级别。

例如,这来自csv-import。

代码语言:javascript
复制
{
  title: 'House A',
  energyElectricity: 55,
  energyHeat: 35, 
  energyCooling:45
}

这真是不太好。我希望它采用以下格式:

代码语言:javascript
复制
  {
    title: 'House A',
    energy: {
     electricity: 55,
     heat: 35,
     cooling:45
    }
  }

有没有使用update查询做到这一点的方法呢?

我试过一些东西,但是没有成功。下面是一些伪代码:

db.consumers.update({},{energy.electricity: energyElectricity,energy.heat:energyHeat},{multi:true});

EN

回答 1

Stack Overflow用户

发布于 2014-05-06 11:53:52

除了循环结果之外,实际上没有其他方法可以做到这一点,因为在更新操作期间,目前不可能引用文档的任何现有字段。

所以你的基本结构需要看起来像这样(不管用哪种语言):

代码语言:javascript
复制
db.collection.find({}).forEach(function(doc) {
    db.collection.update(
        { "_id": doc._id },
        {
            "title": doc.title,
            "energy": {
               "electricity": doc.energyElectricty,
               "heat": doc.energyHeat,
               "cooling": doc.energyCooling
            }
        }
    );

});

您可以使用MongoDB 2.6及更高版本中提供的"bulk updates"更有效地执行此操作:

代码语言:javascript
复制
var batch = [];
var count = 0;

db.collection.find({}).forEach(function(doc) {

    batch.push({
        "q": { "_id": doc._id },
        "u": {
            "title": doc.title,
            "energy": {
               "electricity": doc.energyElectricty,
               "heat": doc.energyHeat,
               "cooling": doc.energyCooling
            }
        }
    });
    count++;

    if ( count % 500 == 0 ) {
        db.runCommand({ "update": "collection", "updates": batch });
        batch = [];
    }

});

if ( batch.length > 0 ) {
    db.runCommand({ "update": "collection", "updates": batch });
}

因此,虽然所有的更新都是通过网络完成的,但实际上每500个(或多少个你觉得舒服的位于16MB BSON限制之下)的项目才会通过网络发送一次。

当然,既然您提到这来自CSV导入,那么如果这是一个合理的选择,您总是可以重塑您的输入并再次导入集合。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23480281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档