最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

使用猫鼬在mongoDB中查询子文档

网站源码admin19浏览0评论

使用猫鼬在mongoDB中查询子文档

使用猫鼬在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/

我希望这可以帮助您。

发布评论

评论列表(0)

  1. 暂无评论