Tôi có ba kiểu: user
, noun
và usernoun
(user_noun
trong PHP/Eloquent). Có mối quan hệ nhiều đến nhiều giữa user
và noun
. Bảng "tổng hợp" có thuộc tính bổ sung score
. Tôi có thể sử dụng truy vấn này với hùng hồn cho tính tổng điểm của mỗi danh từ người dùng có để có được tổng số điểm của người dùng:Cách chọn, nhómBởi và tham gia vào Đường nước hoặc 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();
Nhưng tôi không thể tìm ra cách để có được điều này để làm việc trong mực nước. Điều này có hiệu quả, nhưng không phải khi tôi bỏ ghi chú dòng .populate('user')
. Tôi cần user
để được điền.
UserNoun
.find({})
//.populate('user')
.groupBy('user')
.sum('score')
.sort({ score: 'desc' })
.exec((err, usernouns) => {
return res.json(usernouns)
})
đây là một truy vấn .native()
rằng hoạt động:
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)
})
})
truy vấn nguồn gốc này có thể được viết lại bằng đường dọc tâm với groupBy
và populate
và sum
?
bạn có thể vui lòng chia sẻ liên kết tài liệu tham khảo cho ' phương thức groupBy' và 'sum'? – Sangharsh
Không thể tìm thấy tài liệu chính xác, nhưng tôi đã thử truy vấn, groupby trong buồm hoạt động với một hàm tính toán. Đã tìm thấy một liên kết - http://stackoverflow.com/questions/20254910/how-do-i-perform-this-query-using-sailsjs-orm-waterline –