मैंने आपकी पिछली समस्या को प्रश्न
में समझाया है . चूंकि इनवॉइसइन्फो एक सरणी है और invoiceData
invoiceInfo
. के अंदर भी एक सरणी , हम मानचित्र और फ़िल्टर का उपयोग करते हैं। फिर हमें invoiceData
. की खाली सरणी को बाहर करना होगा . (यह पिछले चरण में भी किया जा सकता है जैसे कि फ़िल्टर-मैप-> फ़िल्टर, लेकिन यह लंबा हो सकता है, इसलिए मैंने इसे अगले चरण में उपयोग किया)
ये रहा कोड
db.bookings.aggregate([
{
"$match": {
"PaymentStatus": { $ne: "Delivered" }
}
},
{
$set: {
"BookingData.products": {
"$filter": {
"input": "$BookingData.products",
"cond": {
$and: [
{ $ne: [ "$$this.ProductID", undefined ] },
{ $ne: [ "$$this._id", null ] },
{ $ne: [ "$$this.IsDeliveryFailed", "Yes" ] }
]
}
}
}
}
},
{
"$lookup": {
"from": "invoices",
"localField": "Invoices",
"foreignField": "_id",
"as": "invoiceInfo"
}
},
{
$set: {
invoiceInfo: {
$map: {
input: "$invoiceInfo",
as: "info",
in: {
InvoiceData: {
$filter: {
input: "$$info.InvoiceData",
as: "data",
"cond": {
$and: [
{ $ne: [ "$$data.InvoiceID", undefined ] },
{ $ne: [ "$$data.InvoiceID", null ] },
{ $ne: [ "$$data.IsPaymentFailed", "Yes" ] }
]
}
}
}
}
}
}
}
},
{
$set: {
invoiceInfo: {
$filter: {
input: "$invoiceInfo",
cond: { $ne: [ "$$this.InvoiceData", [] ] }
}
}
}
},
{
$match: {
$expr: {
$or: [
{ $ne: [ "$BookingData.products", [] ] },
{ $ne: [ "$invoiceInfo", [] ] }
]
}
}
}
])
कार्य मोंगो खेल का मैदान
आशा है कि यह आपकी मदद करेगा। यह वह समय है जब आपको अपनी आवश्यकता के आधार पर खेलने/काम करने की आवश्यकता होती है। कभी-कभी आपको डेमो में वर्तमान स्थान से पहले या बाद में देखने की आवश्यकता होती है