文档"/>
使用猫鼬在mongoDB中查询子文档
我是初学者的全栈Web开发人员。而且我正在尝试制作电影分级网站。所以我有一个使用猫鼬的用户架构和该架构中的rating子文档。模式示例:
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: '[email protected]',
username: 'maintest',
password: 'aaaa',
ratings: [{
name: 'Avengers'
url: 'www.avengers',
rating: 5,
comment: 'Good Movie'
}]
})
鉴于上述示例:我有一个页面,显示每个电影的所有用户评分,并且我还有一个搜索栏,我想在其中搜索电影名称并看到电影评分弹出窗口。基本上,我的问题是如何查询数据库中每个用户的所有评分,并从查询中获取每个电影的名称。例如:我查询整个数据库和每个用户..因为每个用户都可以对同一部电影进行评分,并为其指定相同的名称..并获得对电影“复仇者”评分的用户的数据库。如果您需要有关此问题的更多信息,请不要犹豫,问我!谢谢
回答如下:您可以完成您所需要的一种方法是:
db.getCollection("movie-ratings").aggregate([
{ $unwind: "$ratings" },
])
这将平整您的所有文档。样本输出:
{ "_id" : ObjectId("5eb059141d704dbea32156a9"), "email" : "[email protected]", "username" : "maintest", "password" : "aaaa", "ratings" : { "name" : "Avengers", "url" : "www.avengers", "rating" : 5, "comment" : "Good Movie" } }
{ "_id" : ObjectId("5eb059141d704dbea32156a9"), "email" : "[email protected]", "username" : "maintest", "password" : "aaaa", "ratings" : { "name" : "Hulk", "url" : "www.avengers", "rating" : 2, "comment" : "Good Movie" } }
另外,由于您位于聚合内,因此可以对其应用许多不同的聚合运算符。例如,您可以应用match运算符,以按特定标题进行过滤:
db.getCollection("movie-ratings").aggregate([
{ $unwind: "$ratings" },
{ $match: { 'ratings.name': 'Avengers' } }
])
您可以在此处了解有关不同运算符的更多信息:
https://docs.mongodb/manual/reference/operator/aggregation-pipeline/
我希望这可以帮助您。
更多推荐
使用猫鼬在mongoDB中查询子文档
发布评论