首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB中的聚集字段

MongoDB中的聚集字段
EN

Stack Overflow用户
提问于 2021-03-31 13:15:33
回答 2查看 58关注 0票数 0

我有两个MongoDb集合:

薄膜

代码语言:javascript
复制
{ _id: ObjectId("60644a81655e8216acf44b6e"), name: 'Django' }
{ _id: ObjectId("60647242c31ba840a0479221"), name: 'Kill Bill' }

筛选

代码语言:javascript
复制
{ _id: ObjectId("60644598655e8216acf44b6a"),
  name: 'Django',
  reviews: '1150',
  cinema: '01' }
{ _id: ObjectId("606445c7655e8216acf44b6b"),
  name: 'Django',
  reviews: '2130',
  cinema: '02' }
{ _id: ObjectId("606445c7655e8216acf44b6c"),
  name: 'Django',
  reviews: '2102',
  cinema: '03' }
{ _id: ObjectId("60647218c31ba840a047921f"),
  name: 'Kill Bill',
  reviews: '2000',
  cinema: '01' }
{ _id: ObjectId("60647218c31ba840a0479220"),
  name: 'Kill Bill',
  reviews: '587',
  cinema: '02' }

我想在电影集中添加一个新的聚合字段total_reviews,该字段是对一部电影的评论总数的总和;例如:

薄膜

代码语言:javascript
复制
{ _id: ObjectId("60644a81655e8216acf44b6e"), name: 'Django', total_reviews: "3382" }
{ _id: ObjectId("60647242c31ba840a0479221"), name: 'Kill Bill', total_reviews: "2587"}

有人能帮我吗?谢谢..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-06 10:15:16

我更改了合并时的on子句,它可以工作。

代码语言:javascript
复制
db.film.aggregate([
   {$lookup: {from: "screening", localField: "_id", foreignField: "film_id", as: "screening"}},
   {$set: {total_reviews : {$sum : "$screening.review"}}},
   {$project : {id:0, screening:0}},
   { $merge: { into: { db: "test", coll: "film" }, on: "_id", whenMatched: "replace", whenNotMatched: "insert" } }
   ])

但是,如果插入新的筛选文档,则字段total_reviews不会自动更新。有一种方法(比如SQL触发器)来自动化这个函数?

票数 0
EN

Stack Overflow用户

发布于 2021-04-08 06:30:18

这是一个正确的解决方案,提供了4个阶段:

代码语言:javascript
复制
db.film.aggregate([
   {$lookup: {from: "screening", localField: "name", foreignField: "name", as: "screening"}},
   {$addFields: {total_reviews : {$sum : "$screening.review"}}},
   {$project : {id:0, screening:0}},
   {$merge: {into: {db: "test", coll: "film"}, on: "_id",
            whenMatched: "replace",whenNotMatched: "insert"}}
   ])

其结果是:

代码语言:javascript
复制
[{ name: 'Django', total_reviews: 5382 }, 
{ name: 'Kill Bill', total_reviews: 2587 }]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66888643

复制
相关文章

相似问题

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