2014-10-29 38 views
0

目前我有mongodb數據庫。每個文檔都有字段data,這是鍵值存儲。 我想將其轉換爲轉換爲Mongodb中的鍵值

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

我現在strycture是:

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

所以我可以使用鍵搜索(我目前使用$存在,但它是緩慢而將我後索引data.k和使用索引進行快速搜索 這樣做的最快方法是什麼現在我使用pymongo單獨編輯每個文檔並保存它,但速度會變慢,是否有本地方式來完成我的工作?

+0

好的溶液。你走向正確的方向,但你提出的問題相反。是的,你想去像你定義的結構。但是你沒有展示你來自的結構,所以有人可以給你指點。儘管如此,簡短的看看您的驅動程序中的[** Bulk **](http://docs.mongodb.org/manual/reference/method/Bulk/)操作更新支持以瞭解選擇的語言。 – 2014-10-29 17:20:36

+0

已更新。我的問題是關於'update()'的結構因爲我是mongo的新手,對我來說看起來很奇怪。 – 2014-10-29 17:25:58

回答

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) 
}) 
+0

好的和工作的解決方案,從我投票 – Disposer 2014-10-30 11:14:54

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); 
}) 
+0

好吧,它會工作,但對於每個記錄鍵和值是不同的 – 2014-10-30 07:13:29