如何根据mongo数据库中的数组长度从mongodb获取数据?

时间:2018-01-17 08:00:55

标签: node.js mongodb mongoose

这是我的猫鼬活动架构。



var Activity = new Schema({
    activityName: {
        type: String,
        required: true
    },
    activityPlace: {
        name: {
            type: String,
            default: 'Virtual'
        },
        location: {
            type: {
                type: String,
                default: 'Point'
            },
            coordinates: {
                type: Array,
                default: [0, 0]
            }
        },
    },
    activityCategory: {
        type: String,
        required: true
    },
    createdBy: {
        type: Schema.ObjectId,
        ref: 'User'
    },
    usersAttending: [{
        type: Schema.ObjectId,
        ref: 'User'
    }],
});




它有一个字段' usersAttending'。 这是我的函数,我称之为mongo活动模型。



var getActivityNearbyFeed = function (location, distance, id, page, pagesize, callback) {
    var criteria = {
        "createdBy": {
            $ne: id
        },
        "activityPlace.location.coordinates": {
            $geoWithin: {
                $centerSphere: [
                    location.coordinates,
                    distance
                ]
            }
        },
    };

    var projection = {};

    var option = {
        lean: true
    }
    var query = Models.Activity.find(criteria, projection, option);
    query.skip(page * pagesize);
    query.limit(pagesize);
    //query.sort();
    query.exec(function (err, data) {
        if (err) {
            callback(err);
        } else {
            callback(null, data);
        }
    })
};




我想根据数组usersAttending的长度来获取数据。我在查询对象中获取数据,是否有任何方法可以根据usersAttending数组的长度在该对象中获取数据。我使用了sort函数但无法找到正确的语法。提前谢谢。

1 个答案:

答案 0 :(得分:0)

很遗憾,你不能直接这样做。最简单的答案是维护一个用于跟踪数组长度的length变量,每次在数组中完成插入时递增它,并递减删除。

另一种方法是使用How to sort documents based on length of an Array field中描述的.aggregate()方法。虽然对于你的查询,确实写得很复杂。