sql >> Databasteknik >  >> NoSQL >> MongoDB

Samlingsbaserad multitenancy med Spring Data MongoDB

Hittade ett sätt att återskapa indexen för en given hyresgäst:

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

Tog lite tid för mig att ta reda på det här. Hoppas detta hjälper. Förbättringar välkomnas.




  1. Mongodb java api:WriteResult#getN()

  2. fråga i mongo Shell ger SyntaxError:missing :after property

  3. lagra ip-serier i Redis

  4. Har mongoose / mongodb tillgång till objektreferenser i schemat under aggregering?