mongodb - 如何在嵌入文档中使用“$size”?
问题描述
我很难获得嵌入文档中数组的大小。
给定一个包含一些文档的集合:
{
"_id": { "$oid": "60e26137600b71f2939ebbe7" },
"name": "Outer doc",
"inner_docs": [
{ "name": "one", "vals": [1,2,3,4,5] },
{ "name": "two", "vals": [1,2,3,4] },
{ "name": "three", "vals": [1,2,3] }
]
}
{
"outer_num": { "$size": "$inner_docs" },
"inner_docs.num_vals": { "$size": "$inner_docs.vals" }
}
我得到了结果文档:
{
"_id": { "$oid": "60e26137600b71f2939ebbe7" },
"inner_docs": [
{ "name": "one", "num_vals": 3 },
{ "name": "two", "num_vals": 3 },
{ "name": "three", "num_vals": 3 }
],
"outer_num": 3,
}
outer_num
是正确的,但num_vals
不是,它应该是值5
,4
和3
分别。
我该如何解决这个问题?
解决方案
演示 - https://mongoplayground.net/p/dpsp907E_fa
使用$map
将表达式应用于数组中的每个项目并返回一个包含应用结果的数组。
db.collection.aggregate([
{
$project: {
"outer_num": { $size: "$inner_docs"},
"inner_docs": {
$map: {
input: "$inner_docs",
as: "doc",
in: { name: "$$doc.name", num_vals: { $size: [ "$$doc.vals" ] } }
}
}
}
}
])
推荐阅读
- node.js - 为什么这个 http 服务器被描述为泄漏?
- java - “错误”的计算结果。爪哇。所以卡住了
- typescript - 将服务添加到 loopback4 应用程序和服务类方法在控制器端点上不起作用
- html - Html更改密码验证失败
- javascript - webgl库中的清除圆圈
- c++ - C ++中变量别名的最佳方法
- python - 有没有办法禁止 @everyone 或 @here 在 say 命令中使用
- java - 使用 java 打开笔记本电脑热点
- tensorboard - 显示过去模型的图表选项卡
- javascript - Jquery UI Datepicker禁用特定日期和所有(星期一和星期二)