2017-04-24 2 views
0

Ich benutze .Net-Treiber Version 2.4 und ich bin nicht in der Lage, einen Weg zu finden, um sicherzustellen, dass ein Index für eine Sammlung. Ich kann es via Shell tunErstellen und Lesen von Indizes Mongodb C#

db.getCollection("myCollection").ensureIndex({"Location.Coordinates":"2dsphere"}); 

Ich habe Leute

collection.EnsureIndex(keys, options) 

Ich kann die Methode finden mit meiner aktuellen Treiberversion zu tun gesehen.

UPDATE ich den folgenden Code gefunden, der für die Erstellung des Index

var index = Builders<myType>.IndexKeys.Geo2DSphere("Location.Coordinates"); 
collection.Indexes.CreateOne(index); 

jetzt will ich sicherstellen, dass, wenn ein Index exists.I haben diese Abfrage funktioniert, die mich Indizes als BsonDocument kehrt aber mit Blick auf Probleme während Deserialisierung dieses BsonDocument. kehrt folgendes Objekt in der Schale

[ 
     { 
      "v" : 2, 
      "key" : { 
       "_id" : 1 
      }, 
      "name" : "_id_", 
      "ns" : "mydb.myCollection" 
     } 
    ] 

ich folgende Klasse bin mit diesem Objekt

internal class MongoDbIndex 
    { 
     public int v { get; set; } 

     public string name { get; set; } 

     public string ns { get; set; } 

     public Dictionary<object,object> key { get; set; } 

    } 

mit Fragen auf Schlüsseleigenschaft deserialisieren, weil verschiedene Indizes verschiedene Datentypen haben.

+0

das ist nicht verfügbar in Treiberversion 2.4.3 – Aarif

+0

das ist Legacy-Treiber. Dafür muss ich downgraden – Aarif

Antwort

1

Schließlich Geo Index Dadurch folgende

var index = Builders<MyCollection>.IndexKeys.Geo2DSphere("Location.Coordinates"); 
db.MyCollection.Indexes.CreateOne(index); 

indem ich bin in der Lage, um sicherzustellen, läuft dies wird den Index zum ersten Mal erstellen, Rest der Zeit wird es nicht einen doppelten Index zu erstellen, wenn bereits existiert.

EnsureIndex Methode ist nicht in der neuesten Version von mongodb C# -Treiber verfügbar.

Verwandte Themen