Лучший способ управлять динамическими документами объектов в C # (официальный драйвер) - PullRequest
1 голос
/ 03 марта 2011

Я искал наилучшие способы управления схемами расширяемых объектов в C # с использованием BsonObject, который можно расширять без создания класса объектов, который содержит определение каждого ключа.

Объект - создать хранилище документов, которое можно расширить с помощью ключа конфигурации, значения, типа из определения. В другом проекте я использовал хранилище BsonArray, но это не практично, и в нашем случае индексы не очень полезны. Объект представляет собой объект, подобный списку значений динамических ключей, для лучшей индексации и запроса.

Спасибо.

//BsonArray method:
    new BsonKeys()
    {
       Key = key,
       Value = item,
       Type = type
    }
    //--------------------------------------------
    //get a cursor like : List<BsonKeys> list
    //--------------------------------------------
    //save method like:
    //.Set("DynamicKeyValues", new BsonArray(list.Select(x => (BsonValue)x.ToBsonDocument())))
    Document result :
    {
        ID:"some _id",
        StaticKey:"Some static",
        ...   
        DynamicKeyValues
        [
            {Key="keyname1" , value="Value1", type="String"},
            {...},
            {Key="keynameN" , value="ValueN", type="String"}    
        ]       
    } 
    //-------------------------------------------

    //Searching like :
    {
        ID:"some _id",
        StaticKey:"Some static",
        ...   
        DynamicKeyValues
        {
          Key:value,
          Key2:Value2,
          ...
          KeyN:valueN   
    }

1 Ответ

0 голосов
/ 08 марта 2011

Если вы хотите повысить эффективность поиска, вы должны использовать дублированные данные для поиска. например: разделить ваши данные по «ключу». попробуйте использовать разные коллекции хранилищ для каждого «ключа».

Примерно так:

//for key is Location
LocationCollection
{
    Value: value
    // reference to root entity
    ID:"some _id",
    StaticKey:"Some static",
}

//for key is Name of person
FullNameCollection
{
    Value: value
    // reference to root entity
    ID:"some _id",
    StaticKey:"Some static",
}
...