gpt4 book ai didi

node.js - Mongoose 数量

转载 作者:太空宇宙 更新时间:2023-11-04 01:31:56 25 4
gpt4 key购买 nike

我想知道有多少用户与我的办公室关联,为此我使用虚拟架构的计数选项。

办公室架构:

const OfficeSchema = mongoose.Schema({
name: { type: String },
admin: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
}, { toJSON: { virtuals: true } });

用户架构:

const UserSchema = mongoose.Schema({
email: { type: String, unique: true, required: true },
first_name: { type: String },
last_name: { type: String },
office: { type: mongoose.Schema.Types.ObjectId, ref: 'Office' },
}, { toJSON: { virtuals: true } });

Office-用户关系:

OfficeSchema.virtual('usersCount', {
ref: 'User',
localField: '_id',
foreignField: 'office',
justOne: false,
count: true
});

当我向 find 方法添加查询参数时,它工作正常,我得到了特定办公室的用户计数。

Office.find({ admin: userId }).populate([
{ path: 'admin', select: '_id email first_name last_name' },
{ path: 'usersCount', select: '_id' }
]);

但是,当没有查询对象时(意味着获取所有办公室及其用户数),我会得到每个办公室的相同用户数,即总数。我只想获取每个办公室的相关用户数量。这可能吗?

最佳答案

在幕后,Mongoose 将对与找到的任何办公室 ID 匹配的所有用户进行查询,正如您可能知道的那样,这就是为什么您得到全面相同的计数。

但是因为 Mongoose 是作为一个单独的查询来执行此操作的,所以没有什么可以阻止您在后 Hook 中自己执行相同的操作。请参阅https://mongoosejs.com/docs/middleware.html#post-async

因此,返回所有办公室后,您需要获取所有用户,按办公室对他们进行分组(请参阅 group ),并计算每个结果组中的人数(请参阅 count )。

此时,您可能需要考虑执行与聚合管道相同的操作,这可以在服务器端更有效地执行。请参阅为聚合模型方法编写组管道: https://docs.mongodb.com/manual/reference/operator/aggregation/group/

关于node.js - Mongoose 数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55831663/

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