अपने पहले दृष्टिकोण में आप आईडी फ़ील्ड को अनुक्रमित नहीं कर सकते, क्योंकि आईडी कुंजी के रूप में उपयोग की जाती है। कुंजी मूल्य शब्दकोश की तरह अपनी तरह का कार्य। यह दृष्टिकोण उपयोगी है यदि आपके पास आईडी का ज्ञात सेट है (निश्चित रूप से कम संख्या)। मान लें कि आपके पहले उदाहरण में आईडी सामने से अच्छी तरह से जानी जाती है,
>>db.your_colleection.find()
{ "_id" : ObjectId("4ebbb6f974235464de49c3a5"), "name" : "bill",
"lines" : {
"idk73716" : { "name" : "Line A" },
"idk51232" : { "name" : "Line B" } ,
"idk23321": { "name" : "Line C" }
}
}
तो आईडी फ़ील्ड idk73716 के लिए मान खोजने के लिए, आप ऐसा कर सकते हैं
db.your_colleection.find({},{'lines.idk73716':1})
{ "_id" : ObjectId("4ebbb6f974235464de49c3a5"), "lines" : { "idk73716" : { "name" : "Line A" } } }
खाली {} क्वेरी को दर्शाता है, और दूसरा भाग {'lines.idk73716':1} एक क्वेरी चयनकर्ता है।
आईडी को कुंजी के रूप में रखने से केवल विशेष फ़ील्ड को चुनने का लाभ मिलता है। भले ही {'lines.idk73716':1} एक फ़ील्ड चयनकर्ता है, यहाँ यह एक क्वेरी और चयनकर्ता के रूप में कार्य करता है। लेकिन यह आपके दूसरे दृष्टिकोण में नहीं किया जा सकता है। मान लें कि दूसरा संग्रह इस तरह का है
> db.second_collection.find()
{ "_id" : ObjectId("4ebbb9c174235464de49c3a6"), "name" : "bill", "lines" : [
{
"id" : "idk73716",
"name" : "Line A"
},
{
"id" : "idk51232",
"name" : "Line B"
},
{
"id" : "idk23321",
"name" : "Line C"
}
] }
>
और आपने फ़ील्ड आईडी को अनुक्रमित किया है, इसलिए यदि आप आईडी द्वारा क्वेरी करना चाहते हैं
> db.second_collection.find({'lines.id' : 'idk73716' })
{ "_id" : ObjectId("4ebbb9c174235464de49c3a6"), "name" : "bill", "lines" : [
{
"id" : "idk73716",
"name" : "Line A"
},
{
"id" : "idk51232",
"name" : "Line B"
},
{
"id" : "idk23321",
"name" : "Line C"
}
] }
>
उपरोक्त आउटपुट को देखकर, यह दिखाई देता है कि मेल खाने वाले उप (एम्बेडेड) दस्तावेजों को अकेले चुनने का कोई तरीका नहीं है, लेकिन यह पहले दृष्टिकोण में संभव है। यह मोंगोडब का डिफ़ॉल्ट व्यवहार है।
देखें
db.second_collection.find({'lines.id' : 'idk73716' },{'lines':1})
केवल idk73716 ही नहीं, सभी लाइनें प्राप्त करेगा
{ "_id" : ObjectId("4ebbb9c174235464de49c3a6"), "lines" : [
{
"id" : "idk73716",
"name" : "Line A"
},
{
"id" : "idk51232",
"name" : "Line B"
},
{
"id" : "idk23321",
"name" : "Line C"
}
] }
आशा है कि यह मदद करता है
संपादित करें
@Gates VP को धन्यवाद इंगित करने के लिए
हम अभी भी आईडी को क्वेरी करने के लिए $exists का उपयोग कर सकते हैं, लेकिन यह अनुक्रमणीय नहीं होगा