正如我上面所写,我有一个模式引用另一个不同的模式。这些是:
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]
});
我想要做的只是知道有多少价值观具有多少价值?'数组作为响应中的字段,这可能吗?在sql中我只能写" count(field)"通过"制作一个"组,我该怎么做?
一个例子:
{
"name" : "mmmmmm",
"description" : "jjjj",
"_id" : ObjectId("533721b91a985b883399cdc2"),
"n_exploits" : 2
}
提前致谢。
答案 0 :(得分: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) {
});
但是现在您执行$unwind
和$sum
操作。在mongodb引擎内部工作通常在" native"代码和JavaScript运算符不可用。而且作为本机代码,这些运算符的工作速度非常快。
另请参阅aggregation operator reference了解您可能希望做的其他事情。
答案 1 :(得分:-1)
你在发布之前试过这个吗?一个简单的谷歌搜索单词“mongodb count group by”给出了很多结果,这不仅告诉你你已经看了aggregation framework,而且还给你一些例子,甚至像你一样{{} 3}}和this。