簡體   English   中英

與貓鼬一起使用max查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM