使用MongoDB从另一个集合获取数据



使用MongoDB,我正在获得销售数据,我正在获得销售客户,但我只获得他们的" id"但我需要他们的数据,比如名字。这是可能的吗?这是我对销售集合的查询,其中客户是销售对象:

db.sales.aggregate([
{
$group: {
_id: {
month: {
$month: "$createdAt"
},
year: {
$year: "$createdAt"
},
dayOfWeek: {
$dayOfWeek: "$createdAt"
},
stringDay: { 
$dateToString: 
{ format: "%Y-%m-%d", date: "$createdAt"}
},
week: {
$isoWeek: "$createdAt"
}
},
paymentType: { $first: '$paymentType' },
client: { $first: '$clientId' },
total: { $sum: '$total'},
count: { $sum: 1 },
totalAverage: { $avg: '$total'},
}
},
{
$project: {
total:  { $round: [ "$total", 2 ] },
year: "$_id.year",
date: "$_id.date",
week: "$_id.week",
numVentas: "$count",
month: "$_id.month",
dayOfWeek: "$_id.dayOfWeek",
stringDay:"$_id.stringDay",
count: "$count",
paymentType: "$paymentType",
client: "$client",
totalAverage: { $round: [ "$totalAverage", 2 ] },
stringMonth: {
$arrayElemAt: [
[
"",
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"
],
"$_id.month"
]
},
stringWeek: {
$switch: {
branches:[
{ case: { $eq: ["$_id.dayOfWeek", 1] }, then: "Lunes" },
{ case: { $eq: ["$_id.dayOfWeek", 2] }, then: "Martes" },
{ case: { $eq: ["$_id.dayOfWeek", 3] }, then: "Miércoles" },
{ case: { $eq: ["$_id.dayOfWeek", 4] }, then: "Jueves" },
{ case: { $eq: ["$_id.dayOfWeek", 5] }, then: "Viernes" },
{ case: { $eq: ["$_id.dayOfWeek", 6] }, then: "Sábado" },
{ case: { $eq: ["$_id.dayOfWeek", 7] }, then: "Domingo" }
],
default: "Día desconocido"
}
}
}
},
{
$group: {
_id:  { month: "$month", stringMonth: "$stringMonth", year: "$year"},
count: { $sum: "$count" },
total: { $sum: "$total" },
totalAverage: { $sum: "$totalAverage" },
sales: {
$push: { 
client: "$client",
paymentType: "$paymentType",
numberDay: "$dayOfWeek",
week: "$week",
stringWeek: "$stringWeek",
date: "$stringDay",
total: "$total",
count: "$count",
totalAverage: { $round: [ "$totalAverage", 2 ] }  
}
}
}
},
{
$group: {
_id: "$_id.year",
monthsWithSales: { $sum: 1 },
count: { $sum: "$count" },
total: { $sum: "$total" },
totalAverage: { $sum: "$totalAverage" },
sales: {
$push: {
month: "$_id.month",
stringMonth: "$_id.stringMonth",
count: "$count",
total: "$total",
totalAverage: "$totalAverage",
sales:"$sales"
}
}
}
}

])

这只给我带来了"_id"但我还需要获得其他数据,例如客户集合中的客户名称:


"_id": 2022,
"monthsWithSales": 4,
"count": 57,
"total": 22324.8,
"totalAverage": 7765.799999999999,
"sales": [
{
"month": 12,
"stringMonth": "Dec",
"count": 33,
"total": 12587.6,
"totalAverage": 4074.5,
"sales": [
{
**"client": {
"$oid": "63890f616d8780e8608266f5"
},**
"paymentType": "CASH",

在MongoDB聚合中,您可以使用查找操作符。参考:-阅读MongoDB网站上的查找。

如果你正在使用Mongoose,你也可以使用Populate方法。

这两种方法都从另一个集合中获取文档,如果它们有一个公共字段,并添加到当前集合中。在这里讨论这个问题可能会比较复杂。因此,请参考查找或填充的官方文档

相关内容

  • 没有找到相关文章

最新更新