सं. $nodes.0
$eq aggregation operator
. में सही व्यंजक नहीं है , जब सरणी फ़ील्ड के साथ प्रयोग किया जाता है।
$eq aggregation operator
निम्नलिखित वाक्य-विन्यास है:
{ $eq: [ <expression1>, <expression2> ] }
आपको $reduce
. का उपयोग करना होगा साथ में $arrayElemAt
$eq ऑपरेटर में अपने क्षेत्र को एक्सेस करने के लिए:
क्वेरी1
db.relations.find({
$expr: {
$eq: [
{
$reduce: {
input: [
{
$arrayElemAt: [
"$nodes",
0
]
}
],
initialValue: false,
in: {
"$and": [
{
$eq: [
"$$this.type",
"User"
]
},
{
$eq: [
"$$this.id",
UUID("dc20f7c7-bd45-4fc1-9eb4-3604428fa551")
]
}
]
}
}
},
true
]
}
})
वैकल्पिक, $eq ऑपरेटर { <field>: { $eq: <value> } }
का उपयोग करके
क्वेरी2
db.relations.find({
"$and": [
{
"nodes.0.type": {
$eq: "User"
}
},
{
"nodes.0.id": {
$eq: UUID("dc20f7c7-bd45-4fc1-9eb4-3604428fa551")
}
}
]
})
यदि आप IXSCAN करना चाहते हैं, तो आप Query2 . का उपयोग कर सकते हैं . आपको निम्नलिखित अनुक्रमणिकाएँ बनानी होंगी:
db.relations.ensureIndex({"nodes.0.id":1})
db.relations.ensureIndex({"nodes.0.type":1})