我在mongo DB有两个收藏品-
在这里您可以下载集合的json - 下载。
我想加入的股票和排序的描述计数,组按description.type。这意味着,UI中有一个名为损伤的列,如果我用这个字段进行排序,那么它将按照最高的损伤计数进行排序。你的帮助将不胜感激。
产出应该是这样的-
{
"stockid": 62790,
"condition": "Used",
"vin": "WA1C4AFY1J2153426",
"make": "Audi",
"carYear": 2018,
"carBody": "SUV",
"model": "SQ5",
"series": "3.0 TFSI Prestige",
"mileage": 21861,
"exteriorColor": "WHITE",
"interiorColor": "DK RED",
"fuelType": "Gasoline Fuel",
"seating": "5",
"listPrice": 35900,
"damageCount": 5,
"possibleFeatureCount": 1,
"featureCount": 5
},
{
"stockid": 62852,
"condition": "Used",
"vin": "WAU43AFD4HN017288",
"make": "Audi",
"carYear": 2017,
"carBody": "Sedan",
"model": "A8 L",
"series": "4.0 TFSI Sport",
"mileage": 32427,
"exteriorColor": "WHITE",
"interiorColor": "LT GRAY",
"fuelType": "Gasoline Fuel",
"seating": "5",
"listPrice": 38900,
"damageCount": 1,
"possibleFeatureCount": 1,
"featureCount": 2
},
{
"stockid": 6740,
"condition": "Used",
"vin": "5TDKK3DC7GS751192",
"make": "Toyota",
"carYear": 2016,
"carBody": "SUV",
"model": "Sienna",
"series": "5dr 7-Pass Van LE FWD",
"mileage": 11111,
"exteriorColor": "BLACK",
"interiorColor": "LT GRAY",
"fuelType": "Gasoline Fuel",
"cylinder": "V6 Cylinder Engine",
"seating": "7",
"listPrice": 18900,
"damageCount": 13,
"possibleFeatureCount": 3,
"featureCount": 3
}
发布于 2020-08-11 13:48:57
您可以使用聚集管道进行计算和排序。我建造了一条管道,我认为符合你的要求。
[
{$unwind: {
path: "$description"
}},
{$group: {
_id: "$stockId",
description: {
$push: "$description"
}
}},
{$lookup: {
from: 'vehicles',
localField: '_id',
foreignField: 'stockid',
as: 'vehicleInfo'
}},
{$addFields: {
damageCount: {
$size: {
$filter: {
input: '$description',
as: 'desc',
cond: {
$eq: [
'$$desc.type',
'DAMAGE'
]
}
}
}
}
}},
{$sort: {
damageCount: -1
}}
]管道所做的第一件事是展开描述数组。我这么做是因为同一个牛仔可能会出现好几次。
然后,$group阶段基于stockid对文档进行分组。原始描述数组中的所有项都被推送到新的描述字段中。
$lookup阶段加入vehicles集合和stockId上的vehicle-pins集合。这个阶段将来自vehicles集合的信息放在一个名为vehicleInfo的数组中。
$addFields阶段为每个名为damageCount的文档添加了一个字段,该字段计算描述中有多少元素的类型等于DAMAGE。
$sort阶段按新的damageCount字段按降序排序文档。
我在MongoDB地图集中包含了管道下面的截图,这样你就可以看到每个阶段都发生了什么。
注意:当我将您的文档导入Atlas时,两个集合中的股票类型并不相同。其中一个是字符串型的,另一个是int32型的。$lookup阶段没有工作,直到我使他们所有的类型。如果不想更新文档本身,可以在管道中添加一个阶段来执行转换:$toInt。


https://stackoverflow.com/questions/63358783
复制相似问题