आपको अपने filters
बदलने की आवश्यकता है जैसा कि नीचे दिखाया गया है।
स्पष्टीकरण
- हम
$addFields
. के साथ दस्तावेज़ संरचना में फ़िल्टर शामिल करते हैं ऑपरेटर। यह हमें सभी आवश्यक मूल्यों की गणना करने में मदद करेगा। - हम
toys
फ़िल्टर करते हैं हाल ही में शामिलfilters
. के साथ$expr
. के साथ विशेषता ऑपरेटर। $filter
लागू करना ऑपरेटर, हम सभी खिलौनों को एक हीcode
. के साथ प्राप्त करते हैंfilters
. से . अब, हमtotal
की गणना कर सकते हैं औरprice_total
मान।- हम
total_coincidences
की गणना कर सकते हैं$group
. के अंदर इस तरह मंच:
लेकिन, आपने "विशिष्ट तत्व" का उल्लेख किया है। इसलिए, हम अद्वितीय टॉय कोड का सेट बनाते हैं और सेट में आइटम गिनते हैं।
db.collection.aggregate([
{
$unwind: "$toys"
},
{
$addFields: {
"filters": [
{
"code": 17001,
"quantify": 2
},
{
"code": 17003,
"quantify": 4
},
{
"code": 17005,
"quantify": 5
},
{
"code": 17005,
"quantify": 6
}
]
}
},
{
$match: {
$expr: {
$in: [ "$toys.code", "$filters.code"]
}
}
},
{
$group: {
_id: "$toystore_name",
total_coincidences: {
$addToSet: "$toys.code"
},
toy_array: {
$push: {
"price_original": "$toys.price",
"toy": "$toys.toy",
"total": {
$size: {
$filter: {
input: "$filters",
cond: {
$eq: [ "$$this.code", "$toys.code"]
}
}
}
},
price_total: {
$sum: {
$map: {
input: {
$filter: {
input: "$filters",
cond: {
$eq: [ "$$this.code", "$toys.code" ]
}
}
},
in: {
$multiply: [ "$toys.price", "$$this.quantify" ]
}
}
}
}
}
}
}
},
{
$addFields: {
total_coincidences: {
$size: "$total_coincidences"
}
}
},
{
$sort: { _id: 1 }
}
])