如何在同一个 mongodb 查询中使用 $unwind 和 $group
How do I use $unwind and then $group in the same mongodb query
我有以下 mongodb 结构...
[
{
track: 'Newcastle',
time: '17:30',
date: '22/04/2022',
bookmakers: [
{
bookmaker: 'Coral',
runners: [
{
runner: 'John',
running: true,
odds: 3.2
},
...
]
},
...
]
},
...
]
我正在尝试为每个文档查找过滤器 bookmakers 数组,以仅包含与指定的 bookmaker 值匹配的对象,例如:
{ 'bookmakers.bookmaker': { $in: ['Coral', 'Bet365'] } }
目前,我正在使用以下 mongodb 查询仅针对 select 指定的博彩公司,但是我需要在将文件分开后将它们放回原处'$unwind',我可以使用 $group 来实现吗?
await HorseRacingOdds.aggregate([
{ $unwind: "$bookmakers" },
{
$group: {
_id: "$_id",
bookmakers: "$bookmakers"
}
},
{
$project: {
"_id": 0,
"__v": 0,
"lastUpdate": 0
}
}
])
普通的 $addFields
和 $filter
怎么样?
db.collection.aggregate([
{
"$addFields": {
"bookmakers": {
"$filter": {
"input": "$bookmakers",
"as": "b",
"cond": {
"$in": [
"$$b.bookmaker",
[
"Coral",
"Bet365"
]
]
}
}
}
}
},
{
$project: {
"_id": 0,
"__v": 0,
"lastUpdate": 0
}
}
])
这里是Mongo playground供大家参考。
我有以下 mongodb 结构...
[
{
track: 'Newcastle',
time: '17:30',
date: '22/04/2022',
bookmakers: [
{
bookmaker: 'Coral',
runners: [
{
runner: 'John',
running: true,
odds: 3.2
},
...
]
},
...
]
},
...
]
我正在尝试为每个文档查找过滤器 bookmakers 数组,以仅包含与指定的 bookmaker 值匹配的对象,例如:
{ 'bookmakers.bookmaker': { $in: ['Coral', 'Bet365'] } }
目前,我正在使用以下 mongodb 查询仅针对 select 指定的博彩公司,但是我需要在将文件分开后将它们放回原处'$unwind',我可以使用 $group 来实现吗?
await HorseRacingOdds.aggregate([
{ $unwind: "$bookmakers" },
{
$group: {
_id: "$_id",
bookmakers: "$bookmakers"
}
},
{
$project: {
"_id": 0,
"__v": 0,
"lastUpdate": 0
}
}
])
普通的 $addFields
和 $filter
怎么样?
db.collection.aggregate([
{
"$addFields": {
"bookmakers": {
"$filter": {
"input": "$bookmakers",
"as": "b",
"cond": {
"$in": [
"$$b.bookmaker",
[
"Coral",
"Bet365"
]
]
}
}
}
}
},
{
$project: {
"_id": 0,
"__v": 0,
"lastUpdate": 0
}
}
])
这里是Mongo playground供大家参考。