gpt4 book ai didi

Node.js : How to return Object in Query Aggregation?

转载 作者:IT老高 更新时间:2023-10-28 13:25:51 26 4
gpt4 key购买 nike

我需要使用 group by

从我的集合中计算指定字段的总和

所以,我使用了聚合函数。

我的愿望是函数应该只返回对象。当我使用 aggregate 时,它返回 Array of Objects

但我的查询返回的是对象数组([{..}, {..}, {..}])而不是单个对象({..}) .

例如,到目前为止我尝试过

用数组[]结构指定

MyModel.aggregate(
[
{$match : ... },
{$group : ... }
], function(err, result) {
console.log(result);
});

指定不带数组[]结构

MyModel.aggregate(
{$match : ... },
{$group : ... }
, function(err, result) {
console.log(result);
});

以上两种情况返回相同。喜欢,

[
{
...
...
}
]

我预期的result只是一个object

{
...
...
}

最佳答案

正式地,聚合命令将管道参数的“列表”作为主要输入。这就是为什么首选“数组”语法的原因。尽管您似乎正在使用的 mongoose 方法并未严格以这种方式实现,但这很可能会改变。

“官方”论点是

  1. 表示管道条件的数组

  2. 一个选项文档,指定用于改变行为的各种选项。

所以这里的 Mongoose 形式只是寻找“列表”中的哪个项目是 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]);
});

这基本上就是像 .findOne() 这样的方法在幕后所做的一切。

关于Node.js : How to return Object in Query Aggregation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25483330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com