Mongodb:查询嵌入式文档的值比较器

时间:2014-05-01 17:52:24

标签: mongodb

我有一个包含多个文档的电影集合,这些文档嵌入了“结果”子文档(一对多):

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

1 个答案:

答案 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
    }
)