arrays - 如何在Mongodb中获取过滤后数组的大小
问题描述
db.FlaggedData.aggregate([
{
"$match": {
"_id": "d86d6b48-e949-4daa-8364-9ef008416ae8"
}
},
{
"$project": {
"users": {
"$slice": [
{
"$filter": {
"input": "$users",
"as": "users",
"cond": {
"$and": [
{ SOME FILTERS
}
]
}
}
},
0,
100
]
},
"count": {"$size": "$users"}
}
}
])
如何获得过滤结果的大小?
正如我现在正在做的那样,我得到的是数组的大小,而不是过滤结果的大小。
谢谢。
解决方案
- 你需要把整个
$slice
计算在内。
db.collection.aggregate([
{
"$match": {
"_id": "d86d6b48-e949-4daa-8364-9ef008416ae8"
}
},
{
"$project": {
"users": {
"$slice": [
{
"$filter": {
"input": "$users",
"as": "user",
"cond": {
"$and": [
{
$eq: [
"$$user.name",
"123"
]
}
]
}
}
},
0,
100
]
},
"count": {
"$size": {
"$slice": [
{
"$filter": {
"input": "$users",
"as": "user",
"cond": {
"$and": [
{
$eq: [
"$$user.name",
"123"
]
}
]
}
}
},
0,
100
]
}
}
}
}
])
或者
- 使用两个
project
db.collection.aggregate([
{
"$match": {
"_id": "d86d6b48-e949-4daa-8364-9ef008416ae8"
}
},
{
"$project": {
"users": {
"$slice": [
{
"$filter": {
"input": "$users",
"as": "user",
"cond": {
"$and": [
{
$eq: [
"$$user.name",
"123"
]
}
]
}
}
},
0,
100
]
}
}
},
{
"$project": {
users: {
"$size": "$users"
}
}
}
])
推荐阅读
- python - 在取其他列表的平均值时不能删除带有空列表的行
- java - 如何在屏幕上打印正方形?
- java - 针对多模块部署的应用程序配置 spring 记录器
- css - 媒体打印方向查询在 Chrome 中不起作用
- javascript - Using Javascript to get list items, can I change item order?
- c# - Windows 10 USB 摄像头无法通过代码工作,但可以通过其他程序工作
- django - Django 在同一模型中只有一个用户/一个日期
- java - 捕捉视频(Camera API)和MediaCodec的简单使用
- git - 如何在网络驱动器上的共享子文件夹中 git init
- c# - 如何在 VSCode 中通过调试/发布移动引用的 DLL?