MongoDb एकत्रीकरण लुकअप पर, क्या विशेष फॉर्मेटिंग की आवश्यकता है?
मैं असंबद्ध उपश्रेणियों के साथ MongoDB $ लुकअप का उपयोग करने की कोशिश कर रहा हूं।
MongoDB 3.6.12 का उपयोग करना (समर्थन 3.6 पर शुरू हुआ)https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#join-conditions-and-uncorrelated-sub-queries
निम्नलिखित पाइपलाइन कदम काम कर रहा है, हालांकि अगर मैं पहले "userB" को दूसरे के साथ स्वैप करता हूं, तो कोई परिणाम नहीं मिलता है।
{
from: 'friendships',
let: { requestuser: ObjectId("5c0a9c37b2365a002367df79"), postuser: ObjectId("5c0820ea17a69b00231627be") },
pipeline: [
{
$match : {
$or : [ { "userA" : ObjectId("5c0820ea17a69b00231627be"), "userB" : ObjectId("5c0a9c37b2365a002367df79") // "userB" : '$$requestuser'
},
{
"userA" : ObjectId("5c0a9c37b2365a002367df79"),
"userB" : ObjectId("5c0820ea17a69b00231627be")
}
],
"accepted" : true
}
},
{
$project: {v: 'true'}
}
],
as: "match"}
हार्ड कोडित ऑब्जेक्ट के साथ परिणाम:
"match" : [
{
"_id" : ObjectId("5d6171dd319401001fd326bf"),
"v" : "true"
}
]
चर का उपयोग करने वाले परिणाम:
"match" : [
]
मुझे ऐसा लगता है कि ऑब्जेक्ट्स को विशेष उपचार की आवश्यकता है। सभी उदाहरण जो मुझे मिल सकते हैं वे सरल चर जैसे स्ट्रिंग्स का उपयोग कर रहे हैं।
'$ $ RequestUser' को सत्यापित करने के लिए एक मूल्य निहित है, मैंने इसे प्रक्षेपण पर परीक्षण किया:
"match" : [
{
"_id" : ObjectId("5d6171dd319401001fd326bf"),
"v" : ObjectId("5c0a9c37b2365a002367df79")
}
]
जवाब
जब आप संयुक्त राष्ट्र की सह-संबंधित उप-पंक्ति का उपयोग करते हैं, तो आपको $exprएक चर पास करने के लिए उपयोग करने की आवश्यकता होती है । आप कुछ इस तरह की कोशिश कर सकते हैं।
{
$match: {
$expr: { $or: [
{
$and:[ { $eq: [ "userA", ObjectId("5c0820ea17a69b00231627be") ]
},
{
$eq: [ "userB", ObjectId("5c0a9c37b2365a002367df79") ] }, { $eq: [ "userB", "$$requestuser" ] } ] }, { $and:[
{
$eq: [ "userA", ObjectId("5c0a9c37b2365a002367df79") ] }, { $eq: [ "userB", ObjectId("5c0820ea17a69b00231627be") ]
}
]
}
]
},
"accepted": true,
}
}
मैंने यह दिखाने के लिए एक नमूना डेमो बनाया है कि $expr
अंदर कैसे काम किया जाता है lookup
: असंबंधित सबक्वेरी के लिए नमूना डेमो