Ran*_*ith 8 mongodb node.js mongodb-query aggregation-framework
我需要使用我的集合计算指定字段的总和 group by
所以,我使用了聚合函数.
我的愿望是函数应该只返回Object.当我使用时aggregate,它返回Array of Objects.
但我的查询是返回对象数组([{..}, {..}, {..}])而不是单个对象({..}).
例如,到目前为止我试过了
用Array []结构指定
MyModel.aggregate(
[
{$match : ... },
{$group : ... }
], function(err, result) {
console.log(result);
});
Run Code Online (Sandbox Code Playgroud)
指定没有Array []结构
MyModel.aggregate(
{$match : ... },
{$group : ... }
, function(err, result) {
console.log(result);
});
Run Code Online (Sandbox Code Playgroud)
以上两种情况都返回相同的情况.喜欢,
[
{
...
...
}
]
Run Code Online (Sandbox Code Playgroud)
我的期望result只有一个object
{
...
...
}
Run Code Online (Sandbox Code Playgroud)
Nei*_*unn 10
正式地说,aggregate命令采用管道参数的"列表"作为它的主要输入.这就是首选"数组"语法的原因.虽然它似乎没有通过你似乎正在使用的猫鼬方法严格实现,但这可能会改变.
"官方"论点是
表示管道条件的数组
选项文档,指定用于更改行为的各种选项.
所以这里的猫鼬形式只是在寻找"列表"中的哪个项目,function()并事先考虑一切都是管道.但这将在未来发生变化.你的问题似乎更像是"期待"不同形式产生"文件"或"阵列"作为回应.但这不会发生.
你不是真的,而且有充分的理由.聚合框架或者对集合内容执行操作,就像使用$project或者"分组"信息一样$group.
你通常只期望"一个"结果返回的唯一方法是你专门$match只获得一个结果或者$limit对一个结果的反应,或者即使你$group的单数或null价值.
通常期望它是结果的"集合"或在此表示为数组.现代MongoDB服务器和驱动程序实现实际上可以返回"光标",因此结果可能比新版本的16MB BSON限制更大.但仍然基本上是一个列表.
所以现在它总是一个像"mongoose"这样的数组,看起来你正在使用它.只需返回"第一个元素"即可.可能甚至限制为1:
MyModel.aggregate(
[
{ "$match": ... },
{ "$group": ... },
{ "$limit": 1 }
], function(err, result) {
console.log(result[0]);
});
Run Code Online (Sandbox Code Playgroud)
无论如何,这基本上就像所有方法一样.findOne().
| 归档时间: |
|
| 查看次数: |
9636 次 |
| 最近记录: |