Mam trzy modele: user
, noun
i usernoun
(user_noun
w PHP/Eloquent). Istnieje wiele do wielu relacji między user
i noun
. Tabela "przestawna" ma dodatkowy atrybut score
. Mogę użyć tej kwerendy z wymowny aby zsumować wyniki każdego rzeczownika użytkownik musi uzyskać łączny wynik użytkownika:Jak wybrać, groupBy i dołączyć do Waterline lub 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();
Ale nie mogę dowiedzieć się, jak uzyskać to do pracy w wodnej. To działa, ale nie kiedy odkomentuję linię .populate('user')
. Potrzebuję user
do zapełnienia.
UserNoun
.find({})
//.populate('user')
.groupBy('user')
.sum('score')
.sort({ score: 'desc' })
.exec((err, usernouns) => {
return res.json(usernouns)
})
o to .native()
zapytanie, które działa:
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)
})
})
Może to rodzimy zapytania być zapisane w Wodnicy z groupBy
i populate
i sum
?
Czy możesz udostępniać linków referencyjnych dla ' metody groupBy' i 'sum'? – Sangharsh
Nie można znaleźć dokładnego dokumentu, ale wypróbowałem zapytanie, groupby w żagle działa z funkcją obliczeniową. Znaleziono jeden link - http://stackoverflow.com/questions/20254910/how-do-i-perform-this-query-using-sailsjs-orm-waterline –