mongodb - mongodb 聚合 $in 和 $type
问题描述
我有一个收藏:
{
values: [null, null, 1, 2, 3, 4.6],
}
我想收到一个属性,它告诉我这些值是否是数字。
我试过了:
{
$project: {
hasNumber: {
$in: [{ $eq: [{ $type: '$$CURRENT' }, 'number'] }, '$values'],
},
},
}
但它不起作用,聚合可能会发生这样的事情吗?
解决方案
请试试这个:
db.yourCollectionName.aggregate([{
$project: {
values: 1, hasNumber: {
$gt: [{
$size: {
$filter:
{
input: "$values",
as: "value",
cond: { $eq: [{ $type: '$$value' }, 'int'] }
// To check & include double as well, replace above cond with this :
//cond: { $or :[ {$eq: [{ $type: '$$value' }, 'int']} , {$eq: [{ $type: '$$value' }, 'double']}] }
}
}
}, 0]
}
}
}])
收集数据:
/* 1 */
{
"_id" : ObjectId("5e14d9dd627ef78236ea77e3"),
"values" : [
null,
null,
1,
2,
3,
4.6
]
}
/* 2 */
{
"_id" : ObjectId("5e14d9e4627ef78236ea785f"),
"values" : [
null,
null
]
}
/* 3 */
{
"_id" : ObjectId("5e14decc627ef78236eb12d3"),
"values" : [
"1",
4.6
]
}
结果 :
/* 1 */
{
"_id" : ObjectId("5e14d9dd627ef78236ea77e3"),
"values" : [
null,
null,
1,
2,
3,
4.6
],
"hasNumber" : true
}
/* 2 */
{
"_id" : ObjectId("5e14d9e4627ef78236ea785f"),
"values" : [
null,
null
],
"hasNumber" : false
}
/* 3 */ // If we're checking for double this hasNumber will be true
{
"_id" : ObjectId("5e14decc627ef78236eb12d3"),
"values" : [
"1",
4.6
],
"hasNumber" : false
}
推荐阅读
- javascript - 通过Java清除IE中的cookies
- kendo-ui - 无法使用 Kendo UI 调度程序自定义视图
- r - R 在 parLapply 中使用变量
- python - Cython“模板参数中的未知类型”错误
- java - 如果目标字段值为空,则选择列表项替代字段值
- java - 避免 Hibernate Criteria 中的重复行
- javascript - 从子组件修改父数组 - React
- php - 将下拉值更改为正确的颜色 WooCommerce
- android - 在 attachBaseContext 中使用 dagger-injected 对象
- spring - 如何在静态上下文/方法中获取 spring bean(Hibernate Envers 修订监听器)