【发布时间】:2020-07-08 22:04:36
【问题描述】:
cities集合中的文档结构是这样的
城市
{
_id: ObjectId("5e78ec62bb5b406776e92fac"),
city_name: "Mumbai",
...
...
subscriptions: [
{
_id: 1,
category: "Print Magazine",
subscribers: 183476
options: [
{
name: "Time",
subscribers: 56445
},
{
name: "The Gentlewoman",
subscribers: 9454
},
{
name: "Gourmand",
subscribers: 15564
}
...
...
]
},
{
_id: 2,
category: "RSS Feed",
subscribers: 2645873
options: [
{
name: "Finance",
subscribers: 168465
},
{
name: "Politics",
subscribers: 56945
},
{
name: "Entrepreneurship",
subscribers: 56945
},
...
...
]
}
]
}
现在当用户像下面这样订阅时
{
cityId: 5e78ec62bb5b406776e92fac
selections: [
{
categoryId: 1,
options : ["Time", "Gourmand"]
},
{
categoryId: 2,
selected: ["Politics", "Entrepreneurship"]
}
]
}
我想更新cities文档中的以下内容
- 将“印刷杂志”的订阅者增加 1
- 将“时间”的订阅者增加 1
- 将“美食家”的订阅人数增加 1
- 将“RSS Feed”的订阅者增加 1
- 将“政治”的订阅者增加 1
- “创业”的订阅人数增加 1
所以当一个item被订阅时,它的订阅数加1。它所属的类别,它的订阅数也加1。
我想在单个更新查询中实现这一点。任何提示我该怎么做?
用例详情
每个用户的订阅详情都存储在user_subscription_details 集合中(此处未列出)。 cities 中的 subscriptions 属性仅包含每个城市的订阅摘要。
【问题讨论】:
-
用户订阅 数据是 JSON(不是集合文档)?可能会使用聚合进行更新。
-
@prasad_这有关系吗?因为我需要更新文档的一部分而不是整个文档。
-
您想根据
user subscribes更新city_subscriptions? -
@Valijon 是的。每个文档代表一个城市及其订阅。
-
user suscribers是否存储在单独的集合中?我们需要以$out作为最后阶段执行聚合以覆盖整个集合(由 prasad_ 说)
标签: mongodb spring-boot nosql mongodb-update