arrays - MongoDB 对象数组
问题描述
我面临的问题如下:
我有一个MongoDB文档,其结构如下
"name": "XYZ",
"array":[
{
"value": "Alpha"
},
{
"value": "Beta"
},
{
"value": "Alpha"
},
]
我必须计算有多少对象具有 Alpha 值。我尝试了以下两个查询,但都只给我值 1。
db.current_database.find({array: {$elemMatch: {value: "Alpha"}}}).count()
db.current_database.find({'array.value': 'Alpha'}).count()
解决方案
集合方法返回文档,而find
不是片段。
计算数组中元素出现次数的几个选项:
大多数语言都提供了一种过滤/减少/计数数组中元素的方法,因此这在客户端应该相当简单。
MongoDB 聚合框架提供了$reduce
, $filter
, $size
, $group
,$unwind
和其他一些可能在这种情况下有用的运算符。
一种可能的解决方案$reduce
:
db.current_database.aggregate([
{$match: {"array.value": "Alpha"}},
{$addFields:{
count: {
$reduce: {
input: "$array",
initialValue: 0,
in: {
$cond: {
if: {$eq: ["$$this.value", "Alpha"]},
then: {$sum: ["$$value", 1]},
else: "$$value"
}
}
}
}
}}
])
推荐阅读
- angular - nginx -AWS EC2 -Angular 子路径不适用于直接请求
- google-apps-script - 将数据从一个 Google 电子表格保存到另一个以创建数据库
- ios - 无法为 AVCaptureVideoPreviewLayer 设置边界
- php - 安装作曲家
- javascript - 防止机器人点击 javascript 中的可点击图像
- java - ApachePOI:NoClassDefFoundError:org.apache.poi.openxml4j.exceptions.invalidFormatException
- java - 重新打开 GUI 不显示保存的数据
- c - 使用C从字符串中删除连续重复的字符
- javascript - JavaScript中带有未知参数的柯里化函数
- r - R找到给定尺寸的所有可能方向