2013-04-11 11 views
10

के साथ MongoDB में शब्दकोश डालें I ऐसी स्थिति में है जहां मैं भविष्यवाणी नहीं कर सकता कि मेरे मोंगोडीबी दस्तावेज़ में कौन से फ़ील्ड होने जा रहे हैं। तो अब मैं _id प्रकार BsonID के क्षेत्र के साथ कोई ऑब्जेक्ट नहीं बना सकता। मुझे एक शब्दकोश (हैशटेबल) बनाने के लिए बहुत सुविधाजनक लगता है और मुझे अपनी डेटटाइम और स्ट्रिंग ऑब्जेक्ट्स को अंदर जितनी बार चाहिए, उतनी बार जोड़ना।सी # चालक

मैं परिणामस्वरूप शब्दकोश ऑब्जेक्ट को मोंगोडीबी में डालने का प्रयास करता हूं, लेकिन डिफ़ॉल्ट क्रमबद्धता विफल हो जाती है।

यहाँ प्रकार HashTable की मेरी वस्तु है (एक शब्दकोश की तरह है, लेकिन अंदर विभिन्न प्रकार के साथ):

{ "_id":"", 
"metadata1":"asaad", 
"metadata2":[], 
"metadata3":ISODate("somedatehere")} 

और चालक मैं से त्रुटि है:

Serializer DictionarySerializer उम्मीद क्रमबद्धता विकल्प टाइप प्रकार सर्टिलाइजेशनऑप्शन, दस्तावेज क्रमशः विकल्प

मैंने इसे गुगल किया, लेकिन कुछ भी नहीं मिला उपयोगी। मैं क्या गलत कर रहा हूं?

उत्तर

13

ड्राइवर को _id फ़ील्ड खोजने में सक्षम होना चाहिए। आप एक सी # कक्षा बना सकते हैं जिसमें केवल दो गुण हैं: आईडी और मान।

public class HashTableDocument 
{ 
    public ObjectId Id { get; set; } 
    [BsonExtraElements] 
    public Dictionary<string, object> Values { get; set; } 

} 

नोट हम उपयोग करने के लिए शब्दकोश < स्ट्रिंग है कि, Hashtable के बजाय > आपत्ति है।

फिर आप की तरह कोड का उपयोग कर एक दस्तावेज़ डालने के लिए निम्नलिखित:

> db.test.find().pretty() 
{ 
     "_id" : ObjectId("518abdd4e447ad1f78f74fb1"), 
     "metadata1" : "asaad", 
     "metadata2" : [ ], 
     "metadata3" : ISODate("2013-05-08T21:04:20.895Z") 
} 
> 
+0

कि शानदार है:

var document = new HashTableDocument { Id = ObjectId.GenerateNewId(), Values = new Dictionary<string, object> { { "metadata1", "asaad" }, { "metadata2", new object[0] }, { "metadata3", DateTime.UtcNow } } }; collection.Insert(document); 

हम डाला दस्तावेज़ वांछित रूप है कि पुष्टि करने के लिए MongoDB खोल उपयोग कर सकते हैं , आपका बहुत बहुत धन्यवाद! –

+0

@RobertStam यह "गतिशील" फ़ील्ड के लिए समाधान प्रदान करता है। दो questioins: ** 1) ** एक बेकरी ऐप में, उपयोगकर्ता 'ब्रांड ए, चीनी, 2 (चम्मच का तात्पर्य) लिखने का अपना सम्मेलन रखना पसंद करते हैं, 300 (तापमान का तात्पर्य), 20 (मिनटों का तात्पर्य) '। प्रत्येक की कुंजी नहीं है। ** 2) ** जैसा कि मैं और अधिक पढ़ता हूं, [मैपिंग क्लास] (http://mongodb.github.io/mongo-csharp-driver/2.0/reference/bson/mapping/) यह भी बताता है कि मुझे ' IDictionary', ठीक है। लेकिन यह कहता है कि यह आदेश को संरक्षित नहीं करेगा। आदेश को संरक्षित करने का कोई तरीका? – Jeb50

संबंधित मुद्दे