mongodb - MongoDB - 在集合数组上聚合
问题描述
我有一个看起来像这样的集合:
@Document(collection = "Contact")
public @Data class Contact {
@Id
private String id;
private String institution;
private List<ContactAddressWithProducts> addressesWithProducts;
我将列出所有具有多个addressWithProducts 的联系人,包括addressWithProducts.length 的数量。
这是我的第一次尝试,但它不起作用:
db.Contact.aggregate([{$group: { _id: {institution: "$institution"}, count: {$sum: {addressesWithProducts}} }}, {$match: {count: {"$gt": 1} }} ]);
有谁知道如何解决它?
[编辑] 一个集合看起来像这样:
{
"_id" : ObjectId("5a12c677c2dc334f8983a045"),
"_class" : "com.my.domain.dao.domain.Contact",
"institution" : "Contact name",
...
"addressesWithProducts" : [
{
"products" : [...]
"address" : DBRef("Address", ObjectId("59ede65fc2dc768853cc7843"))
},
{
"products" : [...]
"address" : DBRef("Address", ObjectId("59ede6522222768853cc7843"))
}
],
"creationDate" : ISODate("2017-11-20T12:11:00Z"),
"active" : true,
"address" : DBRef("Address", ObjectId("5a12c677c2dc334f8983a044")),
"tenant" : DBRef("Tenant", ObjectId("58500aed747a6cddb55ba094"))
}
我的预期输出应该是这样的:
{ "_id" : { "institution" : "Contact name" }, "count" : 2 }
{ "_id" : { "institution" : "Contact name 123" }, "count" : 7 }
{ "_id" : { "institution" : "Contact name 5" }, "count" : 4 }
...
解决方案
将您的查询更改为以下内容:
db['Contact'].aggregate(
[
{
$group: {
_id: {institution: "$institution"},
count:{$sum:{$size:{ $ifNull: [ "$addressesWithProducts", [] ] }}}
}
},
{
$match: {
count: {"$gt": 1}
}
},
]
);
推荐阅读
- python - 在他的个人资料页面上查看他有多少订单。姜戈
- amazon-web-services - AWS ECS 容器无法连接到 Elasticache 集群
- perl - 为现有子动态添加前导下划线
- mysql - 将 Laravel Sail 与单独的测试数据库一起使用
- c# - 在我的 ASP.Net 项目中无法从 VS2019 连接到 SQL Server 数据库
- java - 无法访问脚本基类“org.gradle.kotlin.dsl.KotlinBuildScript”
- python - Python Pandas DataFrame,查找最长和最高循环的元素序列
- pagespeed - PageSpeed Insights:“最大的内容绘画”长期存在的原因
- php - 来自数据库的一个 php 查询中有多个 WHERE 条目?
- meshlab - 是否可以查看 .stl 文件上的许可证信息?