2014-02-20 92 views
1

我在名爲Orders的數據庫集合中插入了一些數據。我有一個名爲numberofh的字段。如何更改mongo db集合中字段的類型

但我收集的所有字段都是字符串類型。我連接到服務器上的數據庫蒙戈外殼和我想刪除所有的訂單,其中numberofh是小於5

db.orders.remove({numberofh:{$lt:20}})不起作用,因爲numberofh是一個字符串,因此$lt將無法​​正常工作。

我可以這樣做一些其他方式,如sdb.orders.remove({parseInt(numberofh}:{$lt:20})

回答

1

你不能用MongoDB中的數字比較字符串。您必須首先插入一個新字段,即數字表示numberofh。你必須做轉換客戶端。根據另一個字段的值創建一個字段是不可能的。

db.orders.find({}).forEach(function (x) { 
    x.numberofh_n = parseInt(x.numberofh, 10); 
    db.orders.save(x); 
}); 

之後,你可以通過新的字段刪除記錄:

db.orders.remove({ numberofh_n: { $lt:20 } }) 
+0

這將是最好我的解決方案,如果變化不破在應用一些其他功能。像這樣的東西對我的情況來說是不可行的,因爲其他進程需要某種格式的文檔... – Lix

+0

您在代碼中有一個副本麪食錯誤...'sdb => db' – Lix

+0

@heinob這工作得很好。但是它的變化只有一次,我需要再做一次,我能創造這個領域永遠在那裏嗎? – user3332859

1

我認爲你需要爲光標到達它遍歷每個文檔和轉換每個值:

db.orders.find().forEach(function(doc) { 
    // Extract the relevant value and convert to an int 
    var numberofh_int = parseInt(doc[ "numberofh" ], 10); 
    // Perform conditionals on the value 
    if (numberofh_int < 20){ // $lt:20 
    // Remove the document if it answers to the conditions 
    db.orders.remove(doc); 
    } 
}); 
相關問題