0

对于以下 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"
      }
   ]
}
4

1 回答 1

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

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

于 2012-11-15T22:05:46.180 回答