在MongoDB中删除带有条件的嵌套文档

时间:2012-11-14 22:54:27

标签: mongodb nosql

对于以下JSON,我如何删除身高最小的狗

{
   _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"
      }
   ]
}

1 个答案:

答案 0 :(得分:3)

问题是子文档数组不是集合,您不能对其进行排序或执行其他操作。但是,如果您可以访问JavaScript之类的任何语言界面,那么它是可能的。您只需要提取子文档列表,按高度排序,记住第一个,然后运行命令根据其名称和高度从数组中提取它。 例如,可以使用MongoDB shell中的这个JavaScript代码来完成它:

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

我怀疑解决方案不是最优雅的,但无论如何它都有效。