user
,noun
およびusernoun
(PHP/Eloquentではuser_noun
)の3つのモデルがあります。 user
とnoun
の間に多対多の関係があります。 「ピボット」テーブルには、追加の属性score
があります。私は、ユーザーがユーザーの合計スコアを取得する必要があり、各名詞のスコアを合計する雄弁で、このクエリを使用することができます。ウォーターラインまたはMongoDBでの選択、グループ化、および結合方法
$users = User::leftJoin('noun_user', 'user.id', 'noun_user.user_id')
->groupBy('user.id')
->select('user.*', DB::raw('sum(noun_user.score) as score'))
->orderBy('score', 'desc')
->get();
しかし、私は、これはウォーターラインで動作するように取得する方法を見つけ出すことはできません。これは機能しますが、.populate('user')
行のコメントを外すと表示されません。入力するにはuser
が必要です。ここ
UserNoun
.find({})
//.populate('user')
.groupBy('user')
.sum('score')
.sort({ score: 'desc' })
.exec((err, usernouns) => {
return res.json(usernouns)
})
作品.native()
クエリです:
UserNoun.native(function(err, collection) {
collection.aggregate([
{
$lookup: {
from: 'user',
localField: 'user',
foreignField: '_id',
as: 'user'
}
},
{
$group: { _id: '$user', total: { $sum: '$score' } }
},
{
$sort : { total: -1 }
}
]).toArray(function (err, results) {
return res.json(results)
})
})
は、このネイティブクエリがgroupBy
とpopulate
とsum
とウォーターラインに書き換えることができますか?
groupBy'と 'sum'メソッドはありますか? – Sangharsh
正確な文書を見つけることができませんでしたが、私はクエリを試しました。sailsのgroupbyは、計算機能で動作します。 1つのリンクが見つかりました - http://stackoverflow.com/questions/20254910/how-do-i-perform-this-query-using-sailsjs-orm-waterline –