sql >> Database teknologi >  >> NoSQL >> MongoDB

Samlingsbaseret multitenancy med Spring Data MongoDB

Fandt en måde at genskabe indekserne for en given lejer:

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());
    }
}

Det tog mig noget tid at finde ud af det. Håber dette vil hjælpe. Forbedringer velkommen.




  1. Find tomme dokumenter i en database

  2. Flytter MongoDBs datamappe?

  3. Hvordan forespørger jeg en række ordbøger i MongoDB?

  4. Effektiv sortering af resultaterne af en mongodb geospatial forespørgsel