对于以下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"
}
]
}
答案 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);
})
我怀疑解决方案不是最优雅的,但无论如何它都有效。