我有一个包含多个文档的电影集合,这些文档嵌入了“结果”子文档(一对多):
{
"_id" : 19,
"name" : "Star wars",
"results" : [
{
"type" : "type1",
"score" : 44.51211101958831
},
{
"type" : "type2",
"score" : 0.6578497966368002
},
{
"type" : "type3",
"score" : 93.36341655949683
},
{
"type" : "type3",
"score" : 49.43132782777443
}
]
}
如何删除每部电影的最低type3 score
?
答案 0 :(得分:0)
您可以使用aggregation框架来完成此操作。以下是Node.js上的示例:
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://localhost:27017/test', function(err, db) {
if(err) throw err;
var collection = db.collection('zips');
collection.aggregate(
{
'$unwind':'$results' // expand results array
},
{
'$group':
{
'_id':'$_id', // group results by id
'min':
{
'$min':'$results.score' // and get minimal score
}
}
},
function (err, results) {
if (err) {
console.log(err);
}
console.log(results);
}
);
});
循环浏览results
数组,使用$pull
运算符更新您的收藏。
collection.update(
{
'_id': results[i]._id
},
{
'$pull': { 'results': { 'score': results[i].min } }
},
function(err, updated) {
// update callback
}
)