在模型中查询模型

时间:2017-04-26 13:42:27

标签: node.js mongodb mongoose database

[
    {
        "_id": "59009087f8ed4e2ecc91fcbe",
        "password": "test",
        "email": "",
        "username": "root",
        "__v": 3,
        "stats": [
            {
                "_id": "590090a0f8ed4e2ecc91fcbf",
                "time": 98,
                "scramble": "U2 F R U' R B' L' U L' B2 R2 B F' U2 R' B2 R2 D R2 U",
                "type": "three",
                "status": 0,
                "date": "2017-04-26T12:20:48.622Z"
            },
            {
                "_id": "590090adf8ed4e2ecc91fcc0",
                "time": 120,
                "scramble": "R2 U2 D' U' B D B L' U2 R2 F2 L2 R' F2 U F2 L2 D L2",
                "type": "three",
                "status": 0,
                "date": "2017-04-26T12:21:01.318Z"
            },
            {
                "_id": "590090da8f0e120320f36945",
                "time": 191,
                "scramble": "F2 B' L F R B' F B' D' F2 R2 B U' D' F U D B' F' D",
                "type": "four",
                "status": 0,
                "date": "2017-04-26T12:21:46.679Z"
            }
        ],
        "accountDate": "2017-04-26T12:20:23.085Z"
    }
]

我有一组用户。其中一个用户显示在上面的代码中。我想通过其id选择一个用户。然后从FROMED SELECTED我想要stats数组中的对象,类型为:“three”。我已经找了很长时间,但还没有找到解决方案。我目前使用的方法是:

User.findOne({
        _id: id
    }, function (err, user) {
        if(err){
            console.log(err);
        } else {
            user.stats.forEach(function (time, i, array) {
                if(time.type != req.body.type){
                    array.splice(i, 1);
                }
            });
            res.send(user.stats);
        }

});

问题是stats数组会变得太大而且进程会很慢。

1 个答案:

答案 0 :(得分:0)

如果你找不到从查询中的stats数组中选择的方法,我会说至少不要使用splice来过滤掉错误类型的统计数据。尝试使用过滤器,或将“三个”类型的统计信息推入新阵列,以查看性能是否有所提高。

https://jsperf.com/splice-vs-filter