将 JavaScript 转换为 mongoDB 聚合
Convert JavaScript to mongoDB Aggregation
我正在搜索如何在 MongoDB 的聚合中转换此代码。假设我有这项服务,它将计算即将开始比赛的每项运动中的比赛数量 'Fixtures'
我有两个模型 Fixture,这意味着游戏和运动,每个 Fixture 都有我们可以在聚合期间分组的运动 ID。
这是一个工作示例
export const countFixtures = async () => {
const sports = await Sports.find();
const countFixturesBySport = [];
for (let index = 0; index < sports.length; index++) {
const sport = sports[index];
const countFixtures = await Fixture.countDocuments({
Sport: sport._id,
StartDate: { $gt: new Date() },
});
countFixturesBySport.push({
sport: sport.Name,
sportId: sport._id,
fixturesCount: countFixtures,
});
}
return countFixturesBySport;
};
我从 mongoDB 中的这段代码开始:
await Sports.aggregate([
{
$lookup: {
from: 'fixture',
let: { fixture: '$fixture' },
pipeline: [
{
$match: { $expr: { $eq: ['$_id', '$$fixture'] } },
},{
$project:
{$addFields: {
sport:'Name',
sportId:'_id',
countFixture:''
}}
])
Here 你去吧,你在使用 $lookup
的正确轨道上,只是需要在实际逻辑中进行一些小的调整。
db.sports.aggregate([
{
$lookup: {
from: "fixture",
let: {
sportId: "$_id"
},
pipeline: [
{
$match: {
$expr: {
$eq: [
"$Sport",
"$$sportId"
]
}
}
},
{
$project: {
_id: 1
}
}
],
as: "matchedFixtures"
}
},
{
$project: {
_id: 0,
sport: "$Name",
sportId: "$_id",
fixturesCount: {
$size: "$matchedFixtures"
}
}
}
])
我正在搜索如何在 MongoDB 的聚合中转换此代码。假设我有这项服务,它将计算即将开始比赛的每项运动中的比赛数量 'Fixtures' 我有两个模型 Fixture,这意味着游戏和运动,每个 Fixture 都有我们可以在聚合期间分组的运动 ID。 这是一个工作示例
export const countFixtures = async () => {
const sports = await Sports.find();
const countFixturesBySport = [];
for (let index = 0; index < sports.length; index++) {
const sport = sports[index];
const countFixtures = await Fixture.countDocuments({
Sport: sport._id,
StartDate: { $gt: new Date() },
});
countFixturesBySport.push({
sport: sport.Name,
sportId: sport._id,
fixturesCount: countFixtures,
});
}
return countFixturesBySport;
};
我从 mongoDB 中的这段代码开始:
await Sports.aggregate([
{
$lookup: {
from: 'fixture',
let: { fixture: '$fixture' },
pipeline: [
{
$match: { $expr: { $eq: ['$_id', '$$fixture'] } },
},{
$project:
{$addFields: {
sport:'Name',
sportId:'_id',
countFixture:''
}}
])
Here 你去吧,你在使用 $lookup
的正确轨道上,只是需要在实际逻辑中进行一些小的调整。
db.sports.aggregate([
{
$lookup: {
from: "fixture",
let: {
sportId: "$_id"
},
pipeline: [
{
$match: {
$expr: {
$eq: [
"$Sport",
"$$sportId"
]
}
}
},
{
$project: {
_id: 1
}
}
],
as: "matchedFixtures"
}
},
{
$project: {
_id: 0,
sport: "$Name",
sportId: "$_id",
fixturesCount: {
$size: "$matchedFixtures"
}
}
}
])