作成しているアプリケーションでMongoidとMongoDBを使用しています。次のような1つのプロファイルを持つユーザーがいます。
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
}
}
私は次のようにmapreduceを実行しています:
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);
}
"
ただし、ユーザーに関連付けられているプロファイルを取得するのが困難です。ユーザープロファイルからデータを取得する方法を知っている人はいますか?
ここで不明な点がある場合はお知らせください。どんな助けでもいただければ幸いです。
トニー