2017-02-13 3 views
0

Ich aktualisiere einige Ruby on Rails-Code, der eine ziemlich veraltete Version von Mongoid verwendet. Ich habe die folgende Codezeile, die das erste Dokument in einer Sammlung bekommt und erhöht das Feld nextid von 1, dann gibt den neuen Wert:Ruby/Mongoid - Wie man einen Wert in einer Sammlung erhöht und den neuen Wert zurückgibt

surveyid = SurveyId.first.safely.inc(:nextid, 1)

I Mongoid auf Version 6.0.3 aktualisiert haben, die kein longet hat eine safely Methode. Wenn ich nur verwenden:

surveyid = SurveyId.first.inc(:nextid, 1)

Es funktioniert, aber inc gibt nichts zurück, und ich habe keine Ahnung, was der neue Wert ist.

Was ist der entsprechende Code in neueren Mongoid-Versionen? Vielen Dank!

Antwort

0

Sie können Wert wie folgt abrufen.

surveyid = SurveyId.first.inc(:nextid, 1).nextid 
0

Ich habe dies herausgefunden. Ich fand ein Juwel, das genau das tut, was ich möchte mongoid_auto_increment genannt.

Jetzt kann ich einfach ein Autoinkrementierungsfeld zu meiner Sammlung hinzufügen und damit fertig sein. Außerdem zeigt die source code für diese Gem wie einen Wert zu erhöhen und den neuen Wert bekommen, obwohl ich nicht wirklich in sie zu viel graben habe, da ich gerade den Edelstein zu verwenden, entschied sich stattdessen:

def inc 
    if defined?(::Mongoid::VERSION) && ::Mongoid::VERSION >= '5' 
     collection.find(query).find_one_and_update({ '$inc' => { number: @step } }, new: true, upsert: true, return_document: :after)['number'] 
    elsif defined?(::Mongoid::VERSION) && ::Mongoid::VERSION >= '3' 
     collection.find(query).modify({ '$inc' => { number: @step } }, new: true, upsert: true)['number'] 
    else 
     opts = { 
     "query" => query, 
     "update" => {"$inc" => { "number" => @step }}, 
     "new" => true # return the modified document 
     } 
     collection.find_and_modify(opts)["number"] 
    end 
    end 
Verwandte Themen