gpt4 book ai didi

mongodb - mongodb中单个查询的多个计数

转载 作者:IT老高 更新时间:2023-10-28 13:31:27 28 4
gpt4 key购买 nike

我是 Mongo Db 的新手,希望能在此查询方面提供一些帮助。在过去的几天里,我一直在这里筛选帖子,撕扯头发,看看是否能找到与我的查询相关的任何内容,但没有运气。

我有一个包含类似于以下结构的文档的集合:

_id: xyz
Movieid: 123
MovieName: Titanic
ReleaseDate: 2000-01-01

_id: uvw
Movieid: 456
MovieName: Titanic II
ReleaseDate: 2018-01-01

_id: pqr
Movieid: 789
MovieName: Titanic III
ReleaseDate:

我想在以下 3 个单独的列中将输出作为总电影、有发布日期的电影和没有发布日期的电影的计数:

Total   |   Released  |     UnReleased
3 | 2 | 1

我能够编写单独的查询来执行计数,但我无法成功地将所有这些合并到一个查询中。最终目标是创建一个将这些计数作为输出的 View 。我曾尝试使用 $and 等运算符,但似乎无法使查询按预期工作......这是我所得到的:

db.getCollection("Movies").aggregate({
"$and": [
{ "$match": { "ReleaseDate": { "$exists": true } }},
{ "$count": "Total" },
{ "$match": { "ReleaseDate": { "$exists": true, "$nin": [""] } }},
{ "$count": "Released" },
{ "$match": { "ReleaseDate": { "$exists": true, "$in": [""] } }},
{ "$count": "Unreleased" }
]
})

最佳答案

你可以试试下面$facet聚合

$count聚合将始终为您提供仅单个匹配 ( $match ) 条件的计数。因此,您需要将每个计数进一步划分为多个部分,这就是 $facet通过进程在同一组输入文档的单个阶段内提供多个聚合管道。

db.collection.aggregate([
{ "$facet": {
"Total": [
{ "$match" : { "ReleaseDate": { "$exists": true }}},
{ "$count": "Total" },
],
"Released": [
{ "$match" : {"ReleaseDate": { "$exists": true, "$nin": [""] }}},
{ "$count": "Released" }
],
"Unreleased": [
{ "$match" : {"ReleaseDate": { "$exists": true, "$in": [""] }}},
{ "$count": "Unreleased" }
]
}},
{ "$project": {
"Total": { "$arrayElemAt": ["$Total.Total", 0] },
"Released": { "$arrayElemAt": ["$Released.Released", 0] },
"Unreleased": { "$arrayElemAt": ["$Unreleased.Unreleased", 0] }
}}
])

Output

[{
"Total": 3,
"Released": 2,
"Unreleased": 1
}]

关于mongodb - mongodb中单个查询的多个计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52088666/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com