MongoDB:如何“合并所有”来自同一集合的结果?

时间:2019-03-28 15:09:20

标签: mongodb mongodb-query aggregation-framework

query.1:

db.test.find({category_id:1}).sort({createAt:-1}).limit(5);

query.2:

db.test.find({category_id:2}).sort({createAt:-1}).limit(5);

我想要的是使用一个查询获取query1 + query2的结果,然后按createAt对结果进行排序。

1 个答案:

答案 0 :(得分:0)

您可以在此处使用$facet聚合。

db.test.aggregate([
  { "$facet": {
    "first": [
      { "$match": { "category_id": 1 }},
      { "$sort": { "createAt": -1 }},
      { "$limit": 5 }
    ],
    "second": [
      { "$match": { "category_id": 2 }},
      { "$sort": { "createAt": -1 }},
      { "$limit": 5 }
    ]
  }},
  { "$project": { "data": { "$concatArrays": ["$first", "$second"] }}},
  { "$unwind": "$data" },
  { "$replaceRoot": { "newRoot": "$data" }}
])

更新

使用简单的javascript

const test1 = await db.test.find({ category_id: 1 }).sort({ createAt: -1 }).limit(5)

const test2 = await db.test.find({ category_id: 1 }).sort({ createAt: -1 }).limit(5)

const test = test1.concat(test2)

console.log(test)