Я использую Mongoid и MongoDB в приложении, которое я делаю. У меня есть пользователь, который имеет один профиль, как так:Mongoid Map Уменьшить с has_one
class User
field :email, :type => String
field :name, :type => String
field :date_of_birth, :type => DateTime
has_one :profile
end
class Profile
field :votes, :type => Hash
field :biography, :type => String
belongs_to :profile
end
голосов хэш структурирована следующим образом:
profile : {
"user_id" : ObjectId("511b76b0e80c505750000031"),
"votes": {
"vote_count": 3,
"up_votes": 3,
"down_votes": 0
}
}
Я бегу карты уменьшить примерно так:
map = "
function() {
values = {
name: this.name
}
emit(this._id, values);
}
"
reduce = "
function (key, emits) {
return emits;
}
"
User.map_reduce(map, reduce).out(replace: "leaderboards").each do |document|
ap document
end
это работает прекрасно и создает новую коллекцию в Mongo, называемую лидерами. Однако я пытаюсь сопоставить некоторые данные из профиля, поэтому он включает поле vote_count из профиля.
сути делает моя функция карты выглядеть так:
map = "
function() {
values = {
name: this.name,
votes: this.profile.votes.vote_count
}
emit(this._id, values);
}
"
Однако я с трудом хватая профиль, связанный с пользователем. Кто-нибудь знает, как я могу извлечь данные из профиля пользователей?
Если что-то неясно, дайте мне знать. Любая помощь будет оценена по достоинству.
Тони