MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

क्या मोंगोडीबी इंडेक्स बनाने या अपडेट करने का कोई तरीका है?

ड्राइवर को देख रहे हैं मैंने एक CreateOrUpdateIndex लागू किया है विस्तार विधि जो कच्चे सूचकांक दस्तावेजों की तुलना करती है और यदि सूचकांक विकल्प बदल गए हैं तो सूचकांक को बदल दिया जाता है (जब तक सूचकांक का नाम वही रहता है):

public static WriteConcernResult CreateOrUpdateIndex(
    this MongoCollection mongoCollection,
    IMongoIndexKeys keys,
    IMongoIndexOptions options = null)
{
    if (mongoCollection.IndexExists(keys))
    {
        var indexDocument = mongoCollection.GenerateIndexDocument(keys, options);
        if (!mongoCollection.GetIndexes().RawDocuments.Any(indexDocument.Equals))
        {
            mongoCollection.DropIndex(keys);
        }
    }

    return mongoCollection.CreateIndex(keys, options);
}

कच्चा अनुक्रमणिका दस्तावेज़ बनाना:

public static BsonDocument GenerateIndexDocument(this MongoCollection mongoCollection, IMongoIndexKeys keys, IMongoIndexOptions options)
{
    var optionsDocument = options.ToBsonDocument();
    var keysDocument = keys.ToBsonDocument();
    var indexDocument = new BsonDocument
    {
        { "ns", mongoCollection.FullName },
        { "name", GenerateIndexName(keysDocument, optionsDocument) },
        { "key", keysDocument }
    };
    if (optionsDocument != null)
    {
        indexDocument.Merge(optionsDocument);
    }

    return indexDocument;
}

public static string GenerateIndexName(IEnumerable<BsonElement> keys, BsonDocument options)
{
    const string name = "name";
    if (options != null && options.Contains(name)) return options[name].AsString;

    return string.Join("_", keys.Select(element =>
    {
        var value = "x";
        switch (element.Value.BsonType)
        {
            case BsonType.Int32: value = ((BsonInt32)element.Value).Value.ToString(); break;
            case BsonType.Int64: value = ((BsonInt64)element.Value).Value.ToString(); break;
            case BsonType.Double: value = ((BsonDouble)element.Value).Value.ToString(); break;
            case BsonType.String: value = ((BsonString)element.Value).Value; break;
        }
        return string.Format("{0}_{1}", element.Name, value.Replace(' ', '_'));
    }));
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB - नेस्टेड सरणी के फ़ील्ड मान के आधार पर किसी सरणी ऑब्जेक्ट में फ़ील्ड अपडेट करें

  2. mongodb पर .bson फ़ाइल स्वरूप आयात कैसे करें

  3. MongoDB मानचित्र/सरणी एकत्रीकरण प्रश्न को कम करें

  4. मोंगोडब-एरलैंग एरलांग ड्राइवर उदाहरण

  5. MongoDB के साथ GUID आधारित शार्ड कुंजी को प्रोग्रामेटिक रूप से पूर्व-विभाजित कैसे करें