我有以下计数查询:
db.collection.count({code : {$in : ['delta', 'beta']}});
db.collection.count({code : 'alpha'});
[
{
"code": "detla",
"name": "delta1"
},
{
"code": "detla",
"name": "delta2"
},
{
"code": "detla",
"name": "delta3"
},
{
"code": "detla",
"name": "delta4"
},
{
"code": "beta",
"name": "beta1"
},
{
"code": "beta",
"name": "beta2"
},
{
"code": "beta",
"name": "beta3"
},
{
"code": "beta",
"name": "beta4"
},
{
"code": "beta",
"name": "beta5"
},
{
"code": "alpha",
"name": "alpha1"
},
{
"code": "alpha",
"name": "alpha2"
},
{
"code": "alpha",
"name": "alpha3"
}
]
有没有办法使用single aggregation()和嵌套的$group来实现这一点mongodb@3.2? 我知道这是mapReduce()的一个经典用例,但我在这里没有选择,因为$group by parameters(code
)是一个动态生成的属性,因此聚合阶段的构建也是动态的。
预期输出与两个计数查询的结果相同。-
您可以使用下面的$group
聚合
db.collection.aggregate([
{ "$group": {
"_id": null,
"first": {
"$sum": {
"$cond": [{ "$in": ["$code", ["detla", "beta"]] }, 1, 0]
}
},
"second": {
"$sum": {
"$cond": [{ "$eq": ["alpha", "$code"] }, 1, 0]
}
}
}}
])
但是为了获得更好的性能,我更愿意使用两个计数查询
$in
也在3.4版中发布。对于以前的版本,您可以使用$setIsSubset
db.collection.aggregate([
{ "$group": {
"_id": null,
"first": {
"$sum": {
"$cond": [{ "$setIsSubset": [["$code"], ["detla", "beta"]] }, 1, 0]
}
},
"second": {
"$sum": {
"$cond": [{ "$eq": ["alpha", "$code"] }, 1, 0]
}
}
}}
])
我目前正在努力设置产品变化作为压缩产品目录的一种手段...我们目前有几千个单独的产品页面和变化,我正在寻找一种方法来压缩每个产品类型到一个单一的变化。销售的产品与车辆相关,因此适合每个车型的年份范围: WooCommerce的罐装可变产品为每种属性组合创造了新的变化。例如,“Body Style A”将创建两个相同的变体,我更希望有一个变体,在“年份”是2002年或2003年,而不是只指定一个值。
这是我的代码: 我想将的值设置为,我该怎么做?我试过,
我想知道流(或收集器)中是否已经实现了一个功能,它首先按属性对流进行分组,然后返回列表中按另一个属性排序的第一个元素。例如,以下代码尝试使用第一个属性对对象流进行分组,然后希望收集第二个属性值最高的对象。 现在,我想用流myClassStream实现类似的功能- 我的代码使用简单的循环是: 任何帮助将不胜感激。
本文向大家介绍MongoDB聚合分组多个结果,包括了MongoDB聚合分组多个结果的使用技巧和注意事项,需要的朋友参考一下 要聚合多个结果,请在MongoDB中使用$group。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是汇总组多个结果的查询- 这将产生以下输出-
很简单地说,我有 假设我每个有3000个 创建新的
我有以下文件: 如何发出请求,将Sigle\U 1和Sigle\U 2连接起来,并将值reslut分组? 预期结果示例: 我试过了,但还不完全