[英]using max query with mongoose
我是貓鼬的新手,仍然試圖了解如何進行正確的查詢
我有2個簡單的模型
用戶名 :
const UserSchema = new Schema({
name: String,
age: Number,
movies:[{
type: Schema.Types.ObjectId,
ref: 'movie'
}]
}, { collection: 'USER_COLLEC' });
電影 :
const MovieSchema = new Schema({
title:String ,
duration: Number
}, { collection: 'MOVIE_COLLEC' });
我想要的是電影最長 (持續時間最長 )的用戶
現在我明白了:
db.getCollection('USER_COLLEC') .
aggregate([
{ "$unwind": "$movies" } ,
{ $lookup:
{from: "MOVIE_COLLEC",
localField: "movies",
foreignField: "_id",
as: "movieContent"},
} ,
{ $unwind: "$movieContent" },
{ $group:
{ maxDuration: { $max: "$movieContent.duration" },
}
}
])
但是它只會找到沒有用戶連接的最大持續時間...實際上,我只詢問查詢的最大持續時間,但是在查找之后,我失去了用戶:(
我如何保留它或檢索我的用戶數據?
如果您有任何想法,我將完全陷入困境...
多謝你們 !
您也可以使用$ push來獲取電影對象。
db.getCollection('USER_COLLEC') .
aggregate([
{ "$unwind": "$movies" } ,
{ $lookup:
{from: "MOVIE_COLLEC",
localField: "movies",
foreignField: "_id",
as: "movieContent"},
} ,
{ $unwind: "$movieContent" },
{ $group:
{ _id: { $max: "$movieContent.duration" },
"movie": {
"$push": "movieContent"
}
}
}
])
之后,只需在用戶的電影數組中搜索電影的_id
UserSchema.find({movies:{$in:movieContent[0]._id}});
或者,也可以使用$first
代替$push
{ $first: "$movieContent" }
這樣一來,您就不會得到數組。
更新:
代替{$push: $movieContent}
或{$first: $movieContent}
,您可以按$$ROOT
:
{$push: $$ROOT}
或{$first: $$ROOT}
,然后您將獲得整個對象。 您無需觸發其他查詢即可獲取用戶。
我終於設法找到了解決方案,$ group不是解決方案
db.getCollection('USER_COLLEC') .
aggregate([
{ "$unwind": "$movies" } ,
{ $lookup:
{from: "MOVIE_COLLEC",
localField: "movies",
foreignField: "_id",
as: "movieContent"},
} ,
{ $unwind: "$movieContent" },
{$sort: {"movieContent.duration":-1}},
{ $project: { "user":"$name","duration" : "$movieContent.duration"} } ,
{ $limit : 1 }
這給了我類似的東西:
{
"_id" : ObjectId("59d2f64dded1c008192f7e73"),
"user" : "Michael",
"duration" : 96
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.