sql >> Database >  >> NoSQL >> MongoDB

Multitenancy op basis van collecties met Spring Data MongoDB

Een manier gevonden om de indexen voor een bepaalde huurder opnieuw te maken:

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

Het heeft me wat tijd gekost om dit uit te zoeken. Hoop dat dit zal helpen. Verbeteringen welkom.




  1. Hoe de eigenschap in meerdere objecten in een array voor één document in Meteor-verzameling / minimongo bij te werken?

  2. Welke van CouchDB of MongoDB past bij mijn behoeften?

  3. Een MongoDB-databaseverbinding openhouden

  4. ontgrendel een afgedekte MongoDB-verzameling