2017-01-20 1 views
3

Je voudrais savoir s'il existe des possibilités plus simples (et plus rapides) de créer/remplacer un élément de ma base de données mongo en regardant une clé.Rails - mongoid - créer et remplacer à l'aide de la touche?

Permettez-moi d'expliquer:

MyObject: 

    #<MyObject _id: 5881e885049490276d1d85b9, 
    data_table: [...], 
    my_key: "test"> 

donc ceci est mon objet

Aujourd'hui, je dois modifier un grand nombre d'objets thèses d'une manière très rapide (très souvent) mise à jour du data_table

Aujourd'hui, je fais ceci:

ct = MyObject.where(my_key: "test").first    
ct.update_attributes(data_table: data) 

Mais je pense que je perds beaucoup de performances, non?

Est-ce que je peux faire comme create or update en utilisant la clé my_key pour créer ou redéfinir l'article?

Ou d'autres idées pour améliorer les performances?

merci!

Répondre

0

Essayez ceci:

MyObject.find_or_create_by(my_key: "test").update_attributes(data_table: data) 

Dans ce cas, il n'y a pas des optimisations de performance de côté mongo, il sera à nouveau interroger db, sinon trouvé créera un nouveau record et mettra à jour - juste une ligne .

Une autre optimisation serait de remplacer update_attributes par set si vous n'avez pas besoin d'exécuter des validations sur votre modèle.