Mongoose:如何计算其他模式引用的模式数量?
Posted
技术标签:
【中文标题】Mongoose:如何计算其他模式引用的模式数量?【英文标题】:Mongoose: how to count a number of schema that other schema refers to? 【发布时间】:2014-05-09 10:42:40 【问题描述】:正如我上面写的,我有一个引用另一个不同模式的模式。它们是:
exports.Policies = new mongoose.Schema(
name: String,
description: String,
exploits: [ type : mongoose.Schema.ObjectId, ref : 'exploit', required: true ]
);
exports.exploit = new mongoose.Schema(
name: String,
type: String,
required: [String]
);
我想要做的只是知道有多少值有 'exploits' 数组作为响应中的一个字段,这可能吗?在sql中我只需要写“count(field)”并进行“group by”,我该怎么做?
一个例子:
"name" : "mmmmmm",
"description" : "jjjj",
"_id" : ObjectId("533721b91a985b883399cdc2"),
"n_exploits" : 2
提前致谢。
【问题讨论】:
【参考方案1】:如果您不需要过滤数组内容,实际上只有$size
运算符。
假设您的模式有一个名为“策略”的模型,那么通过使用.aggregate()
可以实现以下目标:
policies.aggregate([
"$unwind": "$exploits"
"$group":
"_id": "$_id",
"count": "sum": 1
],function(err,doc)
);
因此,这是通过展开数组然后计算重新分组时产生的元素数量来实现的。
在未来的版本中,有一个新的 $size
运算符,因此您可以跳过这些阶段并直接使用项目:
policies.aggregate([
"$project":
"count": "$size": "$exploits"
],function(err,doc)
);
或者以其他方式将其与 $group
和 $sum
一起使用以跨文档添加数组。
但现在你执行$unwind
和$sum
操作。在 mongodb 引擎中工作通常是在“本机”代码中完成的,并且 javascript 运算符不可用。但作为本机代码,这些运算符的工作速度非常快。
另请参阅aggregation operator reference,了解您可能希望做的其他事情。
【讨论】:
【参考方案2】:在发帖之前,您是否尝试过搜索此内容?使用“mongodb count group by”进行简单的谷歌搜索会得到很多结果,这些结果不仅告诉您您已经查看了aggregation framework,而且甚至在诸如this 和this.
【讨论】:
我当然做了,但老实说,我没有在搜索中写“group by”。我读了这个问题:***.com/questions/12451575/… 但是猫鼬向我显示了一个错误。我要检查你的链接。感谢您的回复 @Daniel976034 首先尝试提出一种有效的 mongodb 方式,然后再看看如何将其翻译成 mongoose。 好的,知道了。但我有一个问题。 Policies.exploits 是一个数组,我怎样才能得到项目的数量?因为如果我在“$group”语句中写“$exploits.length”,它就不起作用。以上是关于Mongoose:如何计算其他模式引用的模式数量?的主要内容,如果未能解决你的问题,请参考以下文章
如何引用我试图保存在 nestjs/mongoose 中的模式?