我是一个初学者,全栈web dev。我正在试着做一个电影评分网站。所以我在模式中有一个使用mongoose的用户模式和一个评级子文档。模式示例:
const ratingSchema = new mongoose.Schema({
name: String,
url: String,
rating: {
type: Number,
min: 0,
max: 10
},
comment: String
})
const userSchema = new mongoose.Schema({
email: String,
username: String,
password: String,
ratings: [ratingSchema]
})正在使用的模式的示例如下:
const newuser = new User({
email: 'test1@a.com',
username: 'maintest',
password: 'aaaa',
ratings: [{
name: 'Avengers'
url: 'www.avengers.com',
rating: 5,
comment: 'Good Movie'
}]
})给出上面的例子:我有一个页面显示了每部电影的所有用户评分,我还有一个搜索栏,我希望能够在其中搜索电影名称并查看电影评分弹出窗口。基本上,我的问题是如何查询数据库中每个用户的所有评分,并从查询中获取每个电影的名称。例如:我查询了整个数据库,每个user..because每个用户都可以给相同的电影评分,并给它起相同的名字。并获得评价电影《复联》的用户的db。如果你需要关于这个问题的更多信息,请不要犹豫,尽管问我!谢谢
发布于 2020-05-05 04:07:52
根据这个reference,没有对它进行测试,但你可以用mongoose尝试一下:
User.find().elemMatch('ratings', { name: 'Avengers'})发布于 2020-05-05 02:19:33
一种你可以完成你需要的事情的方法是:
db.getCollection("movie-ratings").aggregate([
{ $unwind: "$ratings" },
])这将使您的所有文档变平。示例输出:
{ "_id" : ObjectId("5eb059141d704dbea32156a9"), "email" : "test1@a.com", "username" : "maintest", "password" : "aaaa", "ratings" : { "name" : "Avengers", "url" : "www.avengers.com", "rating" : 5, "comment" : "Good Movie" } }
{ "_id" : ObjectId("5eb059141d704dbea32156a9"), "email" : "test1@a.com", "username" : "maintest", "password" : "aaaa", "ratings" : { "name" : "Hulk", "url" : "www.avengers.com", "rating" : 2, "comment" : "Good Movie" } }此外,因为您在聚合中,所以可以对其应用许多不同的聚合运算符。例如,您可以应用匹配运算符,按特定标题进行筛选:
db.getCollection("movie-ratings").aggregate([
{ $unwind: "$ratings" },
{ $match: { 'ratings.name': 'Avengers' } }
])您可以在此处阅读有关不同运算符的更多信息:
https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/
更新:使用mongoose你可以做这样的事情。假设你有一个名为Ratings的mongoose模型,那么你可以这样做:
const aggregate = Ratings.aggregate([
{ $unwind: "$ratings" },
{ $match: { 'ratings.name': 'Avengers' } }
]);你可以在这里找到更多关于mongoose聚合的信息:
https://mongoosejs.com/docs/api/aggregate.html#aggregate_Aggregate
我希望这能对你有所帮助。
https://stackoverflow.com/questions/61598198
复制相似问题