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 シェルで次の 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 に答える