转换为Mongodb中的键值

时间:2014-10-29 17:15:07

标签: mongodb pymongo key-value

目前我有mongodb数据库。每个文档都有字段data,它是键值存储。 我想将其转换为

data:[
    {'k': key1, v: value1},
    {'k': key2, v: value2},
    {'k': key3, v: value3}]

我目前的结构是:

data:{
    key1: value1,
    key2: value2,
    key3: value3}

所以我可以使用搜索键(目前我正在使用$存在但是它会变慢并且在转换后我可以索引data.k并使用索引进行快速搜索。 最快的方法是什么?现在我正在使用pymongo单独编辑每个文档并保存它。但它会慢下来。有自然的方式来完成我的工作吗?

2 个答案:

答案 0 :(得分:2)

如果我做对了,那就是一个无原子的解决方案;

db.qs.find().forEach(function(item)
{       
    item.data = new Array();
    item.data.push({ k : 'key1', v : item.key1});
    item.data.push({ k : 'key2', v : item.key2});
    item.data.push({ k : 'key3', v : item.key3});

    delete item.key1;  
    delete item.key2;  
    delete item.key3;  

    db.qs.save(item);
})

答案 1 :(得分:2)

找到基于@Disposer变体的解决方案

db.data.find({'d':{$exists: true}}).forEach(function(item){
    d=new Array(); 
    for (var k in item.d){
        d.push({'k': k, 'v': item.d[k]}) 
    } 
    item.d = d;  
    db.item.save(item)
})