首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用mongoose实现mongoDB中子文档的查询

用mongoose实现mongoDB中子文档的查询
EN

Stack Overflow用户
提问于 2020-05-05 01:32:32
回答 2查看 41关注 0票数 0

我是一个初学者,全栈web dev。我正在试着做一个电影评分网站。所以我在模式中有一个使用mongoose的用户模式和一个评级子文档。模式示例:

代码语言:javascript
复制
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]
})

正在使用的模式的示例如下:

代码语言:javascript
复制
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。如果你需要关于这个问题的更多信息,请不要犹豫,尽管问我!谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-05 04:07:52

根据这个reference,没有对它进行测试,但你可以用mongoose尝试一下:

代码语言:javascript
复制
User.find().elemMatch('ratings', { name: 'Avengers'})
票数 0
EN

Stack Overflow用户

发布于 2020-05-05 02:19:33

一种你可以完成你需要的事情的方法是:

代码语言:javascript
复制
db.getCollection("movie-ratings").aggregate([
  { $unwind: "$ratings" },
])

这将使您的所有文档变平。示例输出:

代码语言:javascript
复制
{ "_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" } }

此外,因为您在聚合中,所以可以对其应用许多不同的聚合运算符。例如,您可以应用匹配运算符,按特定标题进行筛选:

代码语言:javascript
复制
db.getCollection("movie-ratings").aggregate([
  { $unwind: "$ratings" },
  { $match: { 'ratings.name': 'Avengers' } }
])

您可以在此处阅读有关不同运算符的更多信息:

https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/

更新:使用mongoose你可以做这样的事情。假设你有一个名为Ratings的mongoose模型,那么你可以这样做:

代码语言:javascript
复制
const aggregate = Ratings.aggregate([
  { $unwind: "$ratings" },
  { $match: { 'ratings.name': 'Avengers' } }
]);

你可以在这里找到更多关于mongoose聚合的信息:

https://mongoosejs.com/docs/api/aggregate.html#aggregate_Aggregate

我希望这能对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61598198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档