mongodb 从具有两个条件和两个不同限制的表中获取数据

lnxxn5zx  于 2023-01-20  发布在  Go
关注(0)|答案(1)|浏览(92)

我有一个表的职位,每个职位有一个类别字段。有10个不同的类别。我想写一个API,返回10个职位从职位表,其中7个应该是从A类别和3个应该是从B类别。
有没有办法只用一个db.collection("posts").find()就能做到这一点?
我现在的做法是:

const postsA = await db.collection("posts").find({ category: "A" }).limit(7).toArray();
const postsB = await db.collection("posts").find({ category: "B" }).limit(3).toArray();
ajsxfq5m

ajsxfq5m1#

当然,您可以使用具有2 $facet的聚合管道,如下所示:

const posts = await db.collection("posts").aggregate([
  {
    "$facet": {
      "postsA": [
        {
          "$match": {
            "category": "A"
          }
        },
        {
          "$limit": 7
        }
      ],
      "postsB": [
        {
          "$match": {
            "category": "B"
          }
        },
        {
          "$limit": 3
        }
      ],
      
    }
  }
]);

https://www.mongodb.com/docs/v6.0/reference/operator/aggregation/facet/

相关问题