【发布时间】:2021-11-26 14:21:29
【问题描述】:
我正在尝试从 2 个集合中获取数据,并返回一个包含两个集合的合并数据的数组。
对我来说最好的解决方案是:
const bothValues = await ValueA.aggregate([
{ $unionWith: { coll: 'valueB' } },
{ $sort: { rank: -1, _id: -1 } },
{
$match: {
isAvailable: true,
},
},
{ $skip: skip },
{ $limit: 30 },
]);
完美运行。但是.. $unionWith 没有实现我的 MongoDB 版本(4.0.X)所以我不能使用它。
const bothValues = await ValueA.aggregate(
[
{ $limit: 1 },
{
$lookup: {
from: 'valueB',
pipeline: [{ $limit: 15 }],
as: 'valueB',
},
},
{
$lookup: {
from: 'ValueA',
pipeline: [{ $limit: 15 }, { $sort: { rank: -1, _id: -1 } }],
as: 'ValueA',
},
},
{
$project:
{
Union: { $concatArrays: ['$valueB', '$ValueA'] },
},
},
{ $unwind: '$Union' },
{ $replaceRoot: { newRoot: '$Union' } },
],
);
但现在,我遇到了 2 个问题:
- 我不能使用
$skip,这很重要,在哪里使用? - 如何使用 $match ?
谢谢
【问题讨论】:
标签: javascript arrays mongodb mongoose union