gpt4 book ai didi

javascript - 对 MongoDB 的多个 mongoose count() 查询

转载 作者:可可西里 更新时间:2023-11-01 09:11:32 24 4
gpt4 key购买 nike

首先:我 -> MongoNoob,我知道已经有人以这样或那样的方式问过这个问题,但直到现在我还没有发现任何具体的问题。假设我有两个这样描述的 Moongoose 模型:

var pollSchema = mongoose.Schema({
title: String,
choices: [{
content: String
}]
});
var choiceSchema = mongoose.Schema({
poll_id: mongoose.Schema.ObjectId,
option: Number
});

一个 UI 显示投票,当用户选择一个选项时,它被写入 choiceSchema 模型。现在我想创建一个“统计数据”,告诉我有多少用户选择了选项 1、选项 2、选项 3,....我可以简单地使用 find 获取投票的所有选择并在服务器代码中生成统计数据,但如果我有一百万个用户选择,我将不得不处理相同大小的数组。这不可能是对的。然而,我可以生成一个查询并使用 count() 方法:

var query = Choice.find({poll_id: someId}),
query.where('option', 1);
var resultForOption1;
query.count(function(err, count)) {
resultForOption1 = count;
});

我如何为多个选项执行此操作并将结果“加入”(哈哈)到一个数组中?由于这都是异步的,我会嵌套调用,但这不是可变数量查询的选项。

我是否只见树木不见森林:-)?有人能指出我正确的方向吗?

BR,丹尼尔

最佳答案

你可以使用聚合来做到这一点:

Choice.aggregate(
{$group: {_id: {poll_id: '$poll_id', option: '$option'}, count: {$sum: 1}}}
).exec(...);

这将按 poll_idoptionchoices 集合文档进行分组,并计算每个的出现次数,输出如下所示:

{
"result": [
{
"_id": {
"poll_id": 2,
"option": 3
},
"count": 1
},
{
"_id": {
"poll_id": 1,
"option": 2
},
"count": 2
},
{
"_id": {
"poll_id": 2,
"option": 2
},
"count": 1
},
{
"_id": {
"poll_id": 1,
"option": 1
},
"count": 1
}
],
"ok": 1
}

然后,您可以在 aggregate 管道中使用后续的 $group$project 阶段,根据需要进一步分组和 reshape 生成的文档。

关于javascript - 对 MongoDB 的多个 mongoose count() 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20653351/

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