MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да създадете MongoDB MultiKey индекс на атрибут на елементи в масив .NET драйвер

Това е пример как да го направите с 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" като индекс, когато изграждате своя индексен ключ. Както разбирам от изходния код на github, това е валидна опция в случай на изграждане на заявки.

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“ е твърдо кодирана константа в страничните mongodb C# драйвери, което означава „$“ (доказателство ). Така че този код ще се опита да създаде индекс:

{ "Key1": 1, "Key2.$.Key": 1 }

което е добре за запитване на информация от база данни, но не е позволено (ще хвърли изключение „Ключът на индекса съдържа нелегално име на поле:името на полето започва с „$““) за използване в индекси. Така че предполагам, че трябва да се промени в драйверите на mongodb, за да работи. Нещо като "-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 }

Така че по същество не мисля, че в момента е възможно да изградите индекс, който искате, с чист Linq, без да променяте mongo C# драйверите.

Така че мисля, че единствената ви възможност да направите така, все още C#, но без Linq

await collection.Indexes.CreateOneAsync(new BsonDocument {{"name", 1}, {"bars.key", 1}});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $arrayElemAt

  2. MongoDB $sinh

  3. Часовникът Grunt Serve хвърля предупреждение EBUSY върху mongod.lock

  4. Вътрешна грешка в сървъра при мигриране на Parse към Heroku/AWS

  5. Клас 'MongoDB\Driver\Manager' не е намерен