यह एक उदाहरण है कि इसे C#
. के साथ कैसे करेंvar indexDefinition = Builders<FooDocument>.IndexKeys.Combine(
Builders<FooDocument>.IndexKeys.Ascending(f => f.Key1),
Builders<FooDocument>.IndexKeys.Ascending(f => f.Key2));
await collection.Indexes.CreateOneAsync(indexDefinition);
अपडेट करें
सरणी के भीतर इंडेक्स के संबंध में, जो मैं ढूंढने में सक्षम था, वह इंडेक्स के रूप में "-1" का उपयोग करना है जब आप अपनी इंडेक्स कुंजी बनाते हैं। जैसा कि मैं जीथब स्रोत कोड से समझता हूं, प्रश्नों के निर्माण के मामले में एक वैध विकल्प है।
var indexDefinition = Builders<FooDocument>.IndexKeys.Combine(
Builders<FooDocument>.IndexKeys.Ascending(f => f.Key1),
Builders<FooDocument>.IndexKeys.Ascending(f => f.Key2[-1].Key));
await collection.Indexes.CreateOneAsync(indexDefinition);
"-1" साइड मोंगोडब सी# ड्राइवरों में एक हार्डकोडेड स्थिरांक है जिसका अर्थ है "$" (सबूत ) तो यह कोड इंडेक्स बनाने की कोशिश करेगा:
{ "Key1": 1, "Key2.$.Key": 1 }
जो डेटाबेस से जानकारी पूछने के लिए ठीक है, लेकिन अनुमति नहीं है (एक अपवाद फेंक देगा "इंडेक्स कुंजी में एक अवैध फ़ील्ड नाम है:फ़ील्ड नाम '$' से शुरू होता है") इंडेक्स में उपयोग करने के लिए। तो मुझे लगता है कि इसे काम करने के लिए इसे मोंगोडब ड्राइवरों में बदला जाना चाहिए। "-2" जैसा कुछ मतलब खाली ऑपरेटर है। उस स्थिति में हम उपयोग कर सकते हैं
var indexDefinition = Builders<FooDocument>.IndexKeys.Combine(
Builders<FooDocument>.IndexKeys.Ascending(f => f.Key1),
Builders<FooDocument>.IndexKeys.Ascending(f => f.Key2[-2].Key));
await collection.Indexes.CreateOneAsync(indexDefinition);
जो सूचकांक उत्पन्न करेगा जैसे:
{ "Key1": 1, "Key2.Key": 1 }
इसलिए मूल रूप से मुझे नहीं लगता कि मोंगो सी # ड्राइवरों को बदले बिना शुद्ध लिंक के साथ आप जो इंडेक्स बनाना चाहते हैं उसे बनाना संभव है।
तो मुझे लगता है कि आपका एकमात्र विकल्प ऐसा करना है, फिर भी सी # लेकिन लिंक के बिना
await collection.Indexes.CreateOneAsync(new BsonDocument {{"name", 1}, {"bars.key", 1}});