लिंक प्रश्न और दिए गए मूल उत्तर दोनों से मृत हैं, लेकिन इसके लिए स्कीमा को परिभाषित करने का एक तरीका है जो समर्थित है आधुनिक संस्करणों में।
अनुशंसित तरीका यह होगा कि एक "language"
. शामिल किया जाए दस्तावेज़ में संपत्ति या टेक्स्ट इंडेक्स के लिए उपयोग की जा रही संपत्ति के बगल में एम्बेडेड दस्तावेज़। शब्द "नेक्स्ट" का अर्थ "समान स्तर" पर है और विशेष रूप से इंडेक्स में संपत्ति के निकट नहीं है।
कुछ सामान्य दिखाई देगा:
{
"description": "Texto largo en español",
"language": "spanish",
"translation": [
{
"description": "Large text in Spanish",
"language": "english"
},
{
"description": "Grand texte en espagnol",
"language": "french"
}
]
},
{
"description": "The quick brown fox",
"translation": [
{
"description": "Le renard brun rapide",
"language": : "french"
}
]
}
और फिर यह मानते हुए कि हम "अंग्रेजी" की "डिफ़ॉल्ट" टेक्स्ट इंडेक्स भाषा का उपयोग करते हैं, हम बस इसके साथ इंडेक्स कर सकते हैं:
db.collection.createIndex({ "description": "text", "translation.description": "text" })
MongoDB तब "language"
. का उपयोग करेगा संपत्ति के रूप में या तो दस्तावेज़ "रूट" या सरणी में "एम्बेडेड दस्तावेज़" से दिखाया गया है, और जहां छोड़े गए यह इंडेक्स के लिए परिभाषित डिफ़ॉल्ट का उपयोग करेगा। उदाहरण के लिए यहां दूसरे दस्तावेज़ में "रूट" पर कोई भाषा गुण नहीं है, इसलिए "english"
माना जाता है क्योंकि यह सूचकांक पर डिफ़ॉल्ट है।
अनुक्रमित आइटम किसी भी क्रम में होने की आवश्यकता नहीं है, जैसा कि "english"
. होने से भी प्रदर्शित होता है "translations"
. के अंदर प्रविष्टि पहले नमूना दस्तावेज़ द्वारा एम्बेडेड दस्तावेज़ों के साथ सरणी। एम्बेड किए गए आइटम के नियम इस मायने में थोड़े अलग हैं कि हमें जरूरी "language"
. शामिल करें एम्बेडेड दस्तावेज़ों पर गुण या वास्तविक भाषा जिसका उपयोग दस्तावेज़ "रूट" से किया जाता है। इस उदाहरण में सरणी में कोई भी एम्बेडेड दस्तावेज़ बिना "language"
संपत्ति को "spanish"
. का उपयोग करने वाला माना जाएगा चूंकि "रूट" में यही परिभाषित किया गया है।
खोज निश्चित रूप से सूचकांक में मौजूद सभी पथों को ध्यान में रखते हुए की जाती है, इसलिए दोनों "description"
पर और एम्बेडेड "translation.description"
गुणों के रूप में यहाँ परिभाषित किया गया है। उपयुक्त "खोज भाषा" अभी भी हमेशा उपयोग की जाती है जैसा कि $language
. के साथ निर्दिष्ट किया गया है $text
. का विकल्प ऑपरेटर, "स्टॉप वर्ड्स" और "स्टेमिंग" के रूप में अभी भी इसके संबंध में माना जाता है और इंडेक्स निर्माण पर निर्धारित डिफ़ॉल्ट इंडेक्स भाषा।
एम्बेडेड प्रारूप आपको दो भाषाओं के बीच "अनुवाद" के लिए भाषा की जानकारी प्राप्त करने का एक आसान बिंदु भी देता है, जहां आपके पास प्रश्न में दोनों भाषाओं के लिए परिभाषित सामग्री है, इसलिए इस मामले में व्यावहारिकता "दो गुना" है।
विशिष्ट दस्तावेज अब टेक्स्ट इंडेक्स के लिए एक भाषा निर्दिष्ट करने के व्यापक विषय के भीतर एक अनुभाग के रूप में एकाधिक भाषाओं में संग्रह के लिए टेक्स्ट इंडेक्स बनाएं पर स्थित है जिसमें इंडेक्स पर एक अलग डिफ़ॉल्ट भाषा निर्दिष्ट करने सहित अन्य सभी विवरणों के लिंक शामिल हैं।