首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何查询两个Collections并返回一个响应?

如何查询两个Collections并返回一个响应?
EN

Stack Overflow用户
提问于 2020-04-06 16:43:13
回答 1查看 32关注 0票数 0

我正在尝试得到电影的结果+每部电影的平均评分。信息位于两个不同的集合中。rating集合保存电影ID。

电影-主要收藏

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
    {
        name: "The Matrix"
        genres: [
            "5e80bc463c410a7291dee8c1",
            "5e80bc463c410a7291dee8c2"
        ],
    },
    {
        name: "The Matrix 2"
        genres: [
            "5e80bc463c410a7291dee8c1",
            "5e80bc463c410a7291dee8c2"
        ],
    }
]

评级

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
    {
        movie: "5e3355c206c7cd030e48b8bc",
        user: "5e3355c206c7cd030e48b8b4",
        rating: 10
    },
    {
        movie: "5e3355c206c7cd030e48b34c",
        user: "5e3355c206c7cd030e48b544",
        rating: 7
    },
    {
        movie: "5e3355c206c7cd030e4823bc",
        user: "5e3355c206c7cd03344823bc",
        rating: 5
    }
}

我希望得到以下结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "total": 1,
    "page": 0,
    "perPage": 25,
    "pageSize": 1,
    "movies": [
        {
            _id: "5e3b0e57870c15002e29a238",
            name: 'The Matrix',
            genres: ['Action', 'Sci-Fi'],
            rating: 10
        },
        {
            _id: "5e3b0e57870c15002e29a239",
            name: 'The Matrix 2',
            genres: ['Action', 'Sci-Fi'],
            rating: 10
        },
    ]
}

我不明白如何将每部电影的平均评分添加到查询结果中。我当前的查询如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Movie.find(demand)
    .select("name genres")
    .skip(page * limit)
    .limit(limit)
    .populate('genres', ['name'])
    .lean()
    .exec((err, movies) => {
        if (err) {
            return res.json(err);
        }

        Movie.countDocuments(demand).exec((count_error, count) => {
            if (err) {
                return res.json(count_error);
            }
            return res.status(200).json({
                total: count,
                page: page,
                perPage: limit,
                pageSize: movies.length,
                movies: movies
            });
        });
    });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-06 21:48:56

在mongoose术语中,您正在寻找“反向填充”,据我所知,它不是随mongoose一起提供的。(例如,参见Reverse populate in mongoose)。

相反,您可以做的是创建一个聚合mongo查询,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Movie.aggregate([{
    $match: demand
}, {
    $skip: page * limit
}, {
    $limit: limit
}, {
    $lookup: {
        from: "ratings",
        localField: "_id",
        foreignField: "movie",
        as: "ratings"
    }
}, {
    $project: {
        name: 1,
        genres: 1,
        ratting: {$avg: "$ratings.rating"}
    }
}]).exec((err, movies) => {
    if (err) {
        return res.json(err);
    }
    Genre.populate(movies, {path: 'genres', select: 'name'}, (err, movies) => {
        if (err) {
            return res.json(err);
        }
        // rest of your code to count etc.
    });
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61064735

复制
相关文章
如何暂时退出vim并返回
本文翻译自:How to temporarily exit vim and go back
全栈程序员站长
2022/09/01
2.1K0
如何查询DNS响应时间
DNS 解析过程涉及将主机名(例如 www.example.com)转换为计算机友好的 IP 地址(例如 192.168.1.1)。Internet 上的每个设备都被分配了一个 IP 地址,必须有该地址才能找到相应的 Internet 设备 - 就像使用街道地址来查找特定住所一样。
冬冬i
2022/04/09
7.8K0
如何查询DNS响应时间
全局响应返回处理
上代码: import io.github.vampireachao.stream.core.optional.Opp; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.server
阿超
2022/08/21
4810
HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码
HttpServletResponse  和 ServletResponse  都是接口
noteless
2018/09/11
4.3K0
HttpServletResponse   ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码
[c++]子程序计算两个数字的相加的结果并返回
转载于:https://www.cnblogs.com/Wzqa/archive/2012/12/20/2827080.html
用户7886150
2021/02/05
1.2K0
如何查询网站收录?如何自动查询网站收录更新并保存?
企业推广自己的业务,大部分情况都需要建立一个官方网站,并且希望能够从搜索引擎获得一部分自然流量。网站&内容运营的第一步自然是做好网站的收录,毕竟首先需要被收录了才能进一步去优化排名,目前国内主流的搜索引擎包括百度、360、搜狗、BING、Google等,那么有什么很好的办法去查询网站的收录呢?
阿那个沫
2022/08/16
10.5K1
如何查询网站收录?如何自动查询网站收录更新并保存?
java查询数据导出excel并返回给浏览器下载
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154129.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/14
8020
java查询数据导出excel并返回给浏览器下载
pycharm如何返回上一个步骤_pycharm如何返回上一个步骤
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/172795.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/25
6980
pycharm如何返回上一个步骤_pycharm如何返回上一个步骤
mybatis查询返回一个对象中带有集合
常用的属性就不说了,特别要注意的是ofType这个要指向各自表的实体类,然后子表的column属性不要和主表重名,一旦重名就会出问题,不知道是不是我配置的问题,希望有大佬指教,反正不重名就可以 接下来就是查询语句了,很简单,只要别名和上面resultMap对的上就ok
星辰sea
2022/10/29
1.9K0
Python多线程并行执行两个函数,并获取线程返回结果
本人使用场景是,获取用户数据,然后插入到库中,并返回查询该用户的相关结果,实际上包含两个操作:
用户7886150
2020/12/01
2.7K0
如何使用calcite构建SQL并执行查询
大家好,这是 Calcite 的第二篇文章了,我一直毫不掩饰对她的喜爱,而且一直在致力于为社区做一些贡献,如果你也喜欢这个项目的话,欢迎评论,转发,如果没看过第一篇的话,也欢迎移步去看看(手把手教你使用Calcite查看SQL执行计划)。如果你还不了解这个项目的话,我也希望能通过我,让你知道这个优秀的项目。
麒思妙想
2023/08/28
1.1K0
如何使用calcite构建SQL并执行查询
ThinkPHP5 多表关联查询的方法 join查询两个数据库表,查询结果拼接返回
德宏大魔王
2023/08/08
5910
ThinkPHP5 多表关联查询的方法 join查询两个数据库表,查询结果拼接返回
uniapp如何封装全局方法 并返回执行结果
在uniapp中你可以这样实现,你可以使用Promise对象来实现当全局公共方法执行完后执行调用者的逻辑。以下是一个简单的示例代码:
兔云小新LM
2023/05/25
3.2K0
uniapp如何封装全局方法 并返回执行结果
Elasticsearch 7.x 去重查询并返回去重后的总数
但是有个问题,就是hits的total value不对,对应的还是未去重的数量,其实想要的是去重后的总数
陈灬大灬海
2021/03/04
4.1K0
Vue响应式系统原理并实现一个双向绑定
我们知道Dep.target在创建Watcher的时候是null,并且它只是起到一个标记的作用,当我们创建Watcher实例的时候,我们的Dep.target就会被赋值到Watcher实例,进而放入target栈中,我们这里调用的是pushTarget函数:
yyds2026
2022/10/19
3430
python查询mysql,返回json
import MySQLdb import json def getSql(): try: con = MySQLdb.connect(host='localhost', user='', passwd='', db='test', charset='utf8') cursor = con.cursor() sql = "select * from user" cursor.execute(sql)
py3study
2020/01/10
3.5K0
python mysqldb 查询返回字
MySQLdb默认查询结果都是返回tuple,输出时候不是很方便,必须按照0,1这样读取,无意中在网上找到简单的修改方法,就是传递一个cursors.DictCursor就行。 默认程序: import MySQLdb db = MySQLdb.connect(host = 'localhost', user = 'root', passwd = '123456', db = 'test') cursor = db.cursor() cursor.execute('select * from user') rs = cursor.fetchall() print rs # 返回类似如下 # ((1000L, 0L), (2000L, 0L), (3000L, 0L)) 修改后: import MySQLdb import MySQLdb.cursors db = MySQLdb.connect(host = 'localhost', user = 'root', passwd = '123456', db = 'test',cursorclass = MySQLdb.cursors.DictCursor) cursor = db.cursor() cursor.execute('select * from user') rs = cursor.fetchall() print rs # 返回类似如下 # ({'age': 0L, 'num': 1000L}, {'age': 0L, 'num': 2000L}, {'age': 0L, 'num': 3000L}) 或者也可以用下面替换connect和cursor部分 db = MySQLdb.connect(host = 'localhost', user = 'root', passwd = '123456', db = 'test') cursor = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)
py3study
2020/01/09
1.1K0
点击加载更多

相似问题

合并两个SELECT语句并返回一个JSON响应

20

如何查询一个表,并返回两个表的结果

31

MySQL如何返回这两个查询的并?

30

MySQL:查询另一个查询结果并返回两个结果?

10

使用fetch API查询端点以获取json响应,并返回一个空响应错误

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文