J'ai un pojo annoté comme ceci: et j'utilise J'ai vraiment besoin de spécifier le nom de la collection manuellement parce que: < / p> Dois-je appeler mongotemplate code> pour insérer dans mongo. Si j'insère sans spécifier un nom de collection, tout fonctionne bien. Toutefois, si je spécifie un nom de collecte, aucun des index n'a été créé à l'exception du
_id code> un. P>
voiture code> finissez dans la même collection li>
voitures code> dans une collection séparée li>
ul>
S'assurez-vous () code> moi-même manuellement? Si oui, est-il un moyen de le faire qui utilise mes annotations code> @indexed code>? Les objets réels que j'essaie d'économiser sont beaucoup plus complexes que la «voiture» p> p>
4 Réponses :
Malheureusement Mongotemplate Code> Fonction
String collection = StringUtils.hasText(index.collection()) ? index.collection() : entity.getCollection();
@Dave: voir peut-être ajouter pour répondre
J'ai vraiment besoin de pouvoir spécifier le nom de la collection manuellement parce que: P>
@Document(collection="cars") class Car { @Id String id ; @Indexed String manufacturer ; } @Document(collection="cars") class Honda extends Car { } @Document(collection="cars") class Volvo extends Car { }
Ce serait bien sauf, comme vous le dites, cela ne m'aidait pas avec le deuxième point = (
Je n'ai pas compris ton deuxième point. S'il vous plaît donner un exemple
Chose sûre. Je ne sais pas à quel point ce cas d'utilisation est répandu, mais pour moi, cela a beaucoup de sens de maintenir des collections complètement séparées pour chaque client. L'objet réel que je stocke est un tweet (pas une voiture) et pour chaque client, je pourrais rassembler des centaines de milliers de tweets. Pour chaque Tweet, je vais attacher différentes annotations pour chaque client. Donc, si elles sont toutes dans une seule collection, elle peut devenir énorme et je dois ajouter de nombreux champs supplémentaires pour suivre lesquels le client se souciait du tweet et des annotations à ce sujet. Une collection = Messy, multiple collections = propre.
Vous êtes peut-être préférable de vous mettre au niveau du niveau de DB et de vérifier si la collection a des index dont vous avez besoin d'utiliser getindexes et appelez l'exsurez-vous dans le démarrage de votre application. p>
Conseil: Implémentez Initializingbean sur la classe qui configure Mongo pour votre application et faites la magie là-bas. P>
Pas de prédication, le printemps IMHO est bon à certaines choses et donc, donc aux autres. J'essaie d'éviter le gonflement autre que pour la gestion DI & TXN dans des environnements non XA. P>
Après une longue recherche, je pense que pour l'instant n'est pas possible à l'aide d'annotations, j'ai donc créé un moyen de gérer par programme pour gérer ce scénario.
Création d'index normal et d'index composé p>
Tout d'abord j'ai défini un objet pour cartographier la structure d'index. p> La collection JSON ressemblera à ce p> alors nous pouvons créer la collection et les index p> La liste d'index unique résultante peut être utilisée pour créer un index de champ unique p> index composé ou L'indice multifield est délicat, nous devons créer des dbobjects pour définir l'index p> et le résultat peut être utilisé pour créer l'index dans la collection P> private void createCompoundIndex(List<DBObject> compoundIndexList, MongoOperations mongoOperations, String collectionName) {
if (compoundIndexList.isEmpty()) return;
for (DBObject compoundIndexDefinition : compoundIndexList) {
mongoOperations.indexOps(collectionName).ensureIndex(new CompoundIndexDefinition(compoundIndexDefinition).background());
}
}
Question similaire Stackoverflow.com/questions/23942469/.../ a>