sql >> Databáze >  >> NoSQL >> MongoDB

Multitenancy založená na kolekcích s Spring Data MongoDB

Nalezen způsob, jak znovu vytvořit indexy pro daného tenanta:

String tenantName = ...;

MongoMappingContext mappingContext = (MongoMappingContext) mongoTemplate.getConverter().getMappingContext();
MongoPersistentEntityIndexResolver resolver = new MongoPersistentEntityIndexResolver(mappingContext);

for (BasicMongoPersistentEntity entity : mappingContext.getPersistentEntities()) {
    if (entity.findAnnotation(Document.class) == null) {
        // Keep only collection roots
        continue;
    }

    String collectionName = entity.getCollection();
    if (!collectionName.startsWith(tenantName)) {
        // Keep only dynamic entities
        continue;
    }

    IndexOperations indexOperations = mongoTemplate.indexOps(collectionName);
    for (MongoPersistentEntityIndexResolver.IndexDefinitionHolder holder : resolver.resolveIndexForEntity(entity)) {
        indexOperations.ensureIndex(holder.getIndexDefinition());
    }
}

Chvíli mi trvalo, než jsem na to přišel. Doufám, že to pomůže. Vylepšení vítána.




  1. Najít pomocí _id nefunguje s agregací

  2. Jak používat příkaz UNSUBSCRIBE v Redis 2.6.11

  3. Existuje způsob, jak získat řez jako výsledek Find()?

  4. Ionic2 + Meteor:získat _id nově vložené položky