如标题所述,我在使用聚合方法从 MongoDB Compass 查询时遇到了一些问题。我有一个这种形式的文件集合:
{"Array":[{"field":"val","field2":"val2"},{"field":"val","field2":"val2"},{"field":"val","field2":"val2"},{"field":"val","field2":"val2"},{"field":"val","field2":"val2"},...]}
Run Code Online (Sandbox Code Playgroud)
使用 mongo shell 或 Studio 3T 软件我用聚合方法查询它,下面是一个例子:
db.collection.aggregate([
{ $match: {"Array.field": "val"}},
{ $unwind: "$Array"},
{ $match: {"Array.field": "val"}},
{ $group: {_id: null, count: {$sum:NumberInt(1)}, Array: {$push: "$Array"}}},
{ $project: {"N. Hits": "$count", Array:1}}
])
Run Code Online (Sandbox Code Playgroud)
我在其中查找具有字段值 = "val" 的 Array 元素并对其进行计数。这很好用,但我不知道如何在 MongoDB Compass 中做同样的事情

在查询栏中,我有“过滤器”、“项目”和“排序”,我可以进行常规查询,但我不知道如何使用聚合方法。谢谢
我是 MongoDB 和 NoSQL 服务器的新手。我正在使用 Studio 3T 软件(MongoDB 的 IDE)在我的计算机上测试一些东西(插入本地数据库、简单查询等),并且在测试聚合方法时我进入了这 3 个操作符:$project、$filter 和 $比赛。问题是我不明白这些运算符之间的区别,我认为我可能理解的唯一一件事是 $project 用于“选择”在屏幕上显示哪些字段(或整个数组)以响应查询,但是$match 和 $filter 呢?他们似乎做同样的事情。我阅读了 MongoDB 文档,但它没有足够详细地解释运算符(当然在我看来)。
提前致谢
如标题所述,我在使用MongoDB计数数组中的元素时遇到了麻烦。我有一个只有一个文档的数据库,如下所示:
{_id: ObjectId("abcdefghilmnopq"),
"Array": [
{field1: "val1",
field2: "val2",
field3: "val3",
...
},
{field1: "Value1",
field2: "Value2",
field3: "Value3",
...
},
...
]
}
Run Code Online (Sandbox Code Playgroud)
我想计算具有一定条件的数组元素的数量(例如field1: "a",并计算具有的所有元素field1 = a)。我正在尝试使用以下代码:
db.collection.aggregate([
{ $unwind : {path: "$Array",
includeArrayIndex: "arrayIndex"}},
{ $match : { "Array.field1" : "a"}},
{ $project : { _id : 0,
Array : 1,
arrayIndex: 1,
total: {$size: "$Array"}}}
])
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
命令失败,错误17124:“ $ size的参数必须是数组,但类型为:对象”在服务器上
我为该问题寻找了几个答案,但没有找到解决该问题的方法。我的意思是,“数组”是一个数组!
提前致谢