Ruby on Rails
Mongoid
Sök…
Installation
Lägg först Mongoid
till din Gemfile
:
gem "mongoid", "~> 4.0.0"
och kör sedan bundle install
. Eller bara springa:
$ gem install mongoid
Efter installationen kör du generatorn för att skapa konfigurationsfilen:
$ rails g mongoid:config
vilket skapar filen (myapp)/config/mongoid.yml
.
Skapa en modell
Skapa en modell (låter oss kalla den User
) genom att köra:
$ rails g model User
vilket genererar app/models/user.rb
:
class User
include Mongoid::Document
end
Detta är allt du behöver för att ha en modell (om än inget annat än ett id
fält). Till skillnad från ActiveRecord
finns det inga migrationsfiler. All databasinformation för modellen finns i modellfilen.
Tidsstämplar ingår inte automatiskt i din modell när du genererar den. Lägg till created_at
och updated_at
till din modell
include Mongoid::Timestamps
till din modell under include Mongoid::Document
så:
class User
include Mongoid::Document
include Mongoid::Timestamps
end
Fields
Enligt Mongoid-dokumentationen finns det 16 giltiga fälttyper:
- Array
- BigDecimal
- Boolean
- Datum
- Datum Tid
- Flyta
- Hash
- Heltal
- BSON :: ObjectId
- BSON :: Binary
- Räckvidd
- Regexp
- Sträng
- Symbol
- Tid
- TimeWithZone
För att lägga till ett fält (låt oss kalla det name
och ha det vara en String
), lägg till detta till din modell fil:
field :name, type: String
För att ställa in ett standardvärde, ange bara default
:
field :name, type: String, default: ""
Klassiska föreningar
Mongoid tillåter de klassiska ActiveRecord
föreningarna:
- En-till-en:
has_one
/belongs_to
- En-till-många:
has_many
/belongs_to
- Många till många:
has_and_belongs_to_many
För att lägga till en förening (låt säga de has_many
inlägg), kan du lägga detta till din User
modell fil:
has_many :posts
och detta till din Post
modellfil:
belongs_to :user
Detta kommer att lägga till en user_id
fält i Post
modell, lägga till en user
till Post
klass och lägga till en posts
metod för att din User
Inbyggda föreningar
Mongoid tillåter inbäddade föreningar:
- En-till-en:
embeds_one
/embedded_in
- En-till-många:
embeds_many
/embedded_in
För att lägga till en förening (låt säga användaren embeds_many
adresser), lägg till detta till din User
fil:
embeds_many :addresses
och detta till din Address
:
embedded_in :user
Detta kommer bädda Address
i User
modell, lägga till en addresses
metod för att din User
Databassamtal
Mongoid försöker ha liknande syntax som ActiveRecord
när det kan. Det stöder dessa samtal (och många fler)
User.first #Gets first user from the database
User.count #Gets the count of all users from the database
User.find(params[:id]) #Returns the user with the id found in params[:id]
User.where(name: "Bob") #Returns a Mongoid::Criteria object that can be chained
#with other queries (like another 'where' or an 'any_in')
#Does NOT return any objects from database
User.where(name: "Bob").entries #Returns all objects with name "Bob" from database
User.where(:name.in => ['Bob', 'Alice']).entries #Returns all objects with name "Bob" or "Alice" from database
User.any_in(name: ["Bob", "Joe"]).first #Returns the first object with name "Bob" or "Joe"
User.where(:name => 'Bob').exists? # will return true if there is one or more users with name bob