这是我的猫鼬活动架构。
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函数但无法找到正确的语法。提前谢谢。
答案 0 :(得分:0)
很遗憾,你不能直接这样做。最简单的答案是维护一个用于跟踪数组长度的length
变量,每次在数组中完成插入时递增它,并递减删除。
另一种方法是使用How to sort documents based on length of an Array field中描述的.aggregate()
方法。虽然对于你的查询,确实写得很复杂。