9
votes

@Nindexed Annotation ignorée lors de l'utilisation de collections nommées

J'ai un pojo annoté comme ceci: xxx

et j'utilise mongotemplate 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 un.

J'ai vraiment besoin de spécifier le nom de la collection manuellement parce que: < / p>

  • J'ai besoin d'assurer différentes sous-classes de voiture finissez dans la même collection
  • Je voudrais stocker chaque année de voitures dans une collection séparée

    Dois-je appeler S'assurez-vous () moi-même manuellement? Si oui, est-il un moyen de le faire qui utilise mes annotations @indexed ? Les objets réels que j'essaie d'économiser sont beaucoup plus complexes que la «voiture»


1 commentaires

4 Réponses :


5
votes

Malheureusement Mongotemplate Code> Fonction

String collection = StringUtils.hasText(index.collection()) ? index.collection() : entity.getCollection();


1 commentaires

@Dave: voir peut-être ajouter pour répondre



2
votes

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 {

}

3 commentaires

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.



0
votes

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.

Conseil: Implémentez Initializingbean sur la classe qui configure Mongo pour votre application et faites la magie là-bas.

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.


0 commentaires

0
votes

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> xxx pré>

La collection JSON ressemblera à ce p> xxx pré>

alors nous pouvons créer la collection et les index p> xxx pré>

La liste d'index unique résultante peut être utilisée pour créer un index de champ unique p> xxx pré>

index composé ou L'indice multifield est délicat, nous devons créer des dbobjects pour définir l'index p> xxx pré>

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


0 commentaires