2012-11-14 64 views
0

對於下面的JSON如何刪除的高度爲至少與條件MongoDB中刪除嵌套文件

{ 
    _id:0 
    "name":"Andy", 
    "pets":[ 
     { 
     "type":"dog","name":"max","height":120 
     }, 
     { 
     "type":"dog","name":"rover","height":44 
     }, 
     { 
     "type":"dog","name":"katie","height":100 
     }, 
     { 
     "type":"cat","name":"minni" 
     } 
    ] 
} 

回答

3

問題是子文檔的陣列是不是一個集合的狗,你不能進行排序或做一些其他的事情。但是,如果您有權訪問JavaScript等任何語言界面,或者可以。您只需提取子文檔列表,按高度對其進行排序,記住第一個子文檔,然後根據名稱和高度運行命令將其從數組中拉出。 例如,它可以利用這段JavaScript代碼就在MongoDB的外殼來完成:

var min = 0; var name = ""; 
db.animals.find({ query:{"_id" : 0} }).forEach(
function(record){ 
    var sets = record.pets; 
    min = sets[0].height; 
    sets.forEach(function(set){ 
     if(set.height <= min) 
      {min=set.height; 
      name=set.name;} 
      }); 
    print(min); 
    print(name);  
    query = {"_id": 0} 
    update = { "$pull" : { "pets" : { "name" : name } } }; 
    db.animals.update(query, update); 
    }) 

我懷疑的解決方案並不是最優雅但無論如何,它的工作原理。

+0

感謝您的示例 – SDS