首页 > 解决方案 > 猫鼬 - 聚合数据

问题描述

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()

我想要做的是也得到总数(没有限制)。当然我可以删除skipandlimit并使用count,然后再次运行它,但我认为 aggregate 适合这种情况?

标签: javascriptmongodbmongoose

解决方案


您可以尝试以下聚合

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" }
    ]
  }}
])

推荐阅读