猫鼬——聚集数据



我正试图用下面的代码来弄清楚如何将aggregate与猫鼬一起使用:

const Model = db.model(which, schema)
var regex = new RegExp(name, "g")
const query =
Model
.find({
name: regex
})
.where("user_id").equals(req.session.user.id)
if (except) 
{
if (Array.isArray(except))
{
query
.where("_id").nin(except)
}
else 
{
query
.where("_id").neq(except)
}
}  
return await
query
.skip(start)
.limit(finish)
.lean()
.exec()

我想做的是得到总数(不受限制(。当然,我可以删除skiplimit并使用count,然后再运行一次,但我认为聚合在这种情况下合适吗?

您可以尝试以下聚合

db.collection.aggregate([
{ "$facet": {
"data": [
{ "$match": {
"name": { "$regex": name },
"user_id": mongoose.Types.ObjectId(req.session.user.id),
"_id": { "$nin": except }
}},
{ "$skip": start },
{ "$limit": finish }
],
"count": [
{ "$match": {
"name": { "$regex": name },
"user_id": mongoose.Types.ObjectId(req.session.user.id),
"_id": { "$nin": except }
}},
{ "$count": "count" }
]
}}
])

要做一次(链(,请执行以下操作:

Model
.aggregate()
.match({
"name": { "$regex": name },
"user_id": ObjectId(req.session.user.id),
"_id": { "$nin": except }
})
.facet({
"results": [
{ "$skip": start },
{ "$limit": finish },
{
"$project": {
"map_levels": 0,
"template": 0
}
}
],
"count": [
{ "$count": "total" },
]
})
.exec()

最新更新