问题是irs_documents集合中的记录太多,无法执行$lookup。
在一个MongoDB查询中是否有执行此操作的performant方法?
db.getCollection('errorlog').aggregate(
[
{
$lookup: {
from: "irs_documents",
localField: "document.ssn",
foreignField: "ssn",
as: "irs_documents"
}
},
{
$group: {
_id: { document: "$document", error: "$error" },
logged_documents: { $sum : 1 }
}
}
]
)
Total size of documents in $lookup exceeds maximum document size
显然这个解决方案行不通。MongoDB实际上是试图用$lookup收集整个文档,我只是想要一个计数。
/* 1 */ { "_id" : ObjectId("56d73955ce09a5a32399f022"), "document" : { "ssn" : 1 }, "error" : "Error 1" } /* 2 */ { "_id" : ObjectId("56d73967ce09a5a32399f023"), "document" : { "ssn" : 2 }, "error" : "Error 1" } /* 3 */ { "_id" : ObjectId("56d73979ce09a5a32399f024"), "document" : { "ssn" : 3 }, "error" : "Error 429" } /* 4 */ { "_id" : ObjectId("56d73985ce09a5a32399f025"), "document" : { "ssn" : 9 }, "error" : "Error 1" } /* 5 */ { "_id" : ObjectId("56d73990ce09a5a32399f026"), "document" : { "ssn" : 1 }, "error" : "Error 8" }
/* 1 */ { "_id" : ObjectId("56d73905ce09a5a32399f01e"), "ssn" : 1, "name" : "Sally" } /* 2 */ { "_id" : ObjectId("56d7390fce09a5a32399f01f"), "ssn" : 2, "name" : "Bob" } /* 3 */ { "_id" : ObjectId("56d7391ace09a5a32399f020"), "ssn" : 3, "name" : "Kelly" } /* 4 */ { "_id" : ObjectId("56d7393ace09a5a32399f021"), "ssn" : 9, "name" : "Pippinpaddle-Oppsokopolis" }
这个错误是不言自明的。查找本质上是将两个文档合并成一个BSON文档,因此MongoDB文档大小限制是一个难题。
您需要问自己,在一个操作中执行两个操作是绝对必要的吗?如果是,请按照以前版本的MongoDB中不支持$lookup的方式执行。
说,执行两个查询,并在您的客户机中执行合并。
db.irs_documents.aggregate([
{
$group:{_id:"$ssn", count:{$sum:1}}
},
{
$out:"irs_documents_group"
}]);
db.errorlog.aggregate([
{
$lookup: {
from: "irs_documents_group",
localField: "document.ssn",
foreignField: "ssn",
as: "irs_documents"
}
},
{
$group: {
_id: { document: "$document", error: "$error" },
logged_documents: { $sum : 1 }
}
}
])
{应用程序:“ABC”,日期:time.now,状态:“1”user_id:[id1,id2,id4]} {应用程序:“ABC”,日期:time.listerment,状态:“1”,user_id:[id1,id3,id5]} {应用程序:“ABC”,日期:time.ystayday-1,状态:“1”,user_id:[id1,id3,id5]} 我目前正在使用聚合框架并计算MongoDB之外的I
有人能帮我把这个mongoDB聚合转换成Spring数据mongo吗? 我试图在每个邀请函文件中获得未提醒与会者的电子邮件列表。 让它在mongo shell中运行,但需要在Spring data mongo中运行。 我的shell查询 ) 正如你们所看到的,这是我提出的,它在管道的项目和团队运作中并没有像预期的那样发挥作用。下面给出了生成的查询。 聚合对象创建 它创建以下查询 聚合对象生成的查询
我有一个名为“Prices”的MongoDB集合,我试图查询“startDate”和“endDate”之间的价格。 该集合每10秒存储一次价格,但是当查询此集合以绘制图形时,每1-2分钟的价格才是真正重要的。 我尝试用两种不同的方式编写此查询: 方法1:使用{$gte:startDate,$lte:endDate} 此方法引发以下错误: 如果删除排序('-timestamp')行,并再次运行此查询
我使用Nodejs和MongoDB与expressjs和mongoose库,创建一个具有用户、文章和评论模式的博客API。下面是我使用的模式。
主要内容:aggregate() 方法,管道MongoDB 中的聚合操作用来处理数据并返回计算结果,聚合操作可以将多个文档中的值组合在一起,并可对数据执行各种操作,以返回单个结果,有点类似于 SQL 语句中的 count(*)、group by 等。 aggregate() 方法 您可以使用 MongoDB 中的 aggregate() 方法来执行聚合操作,其语法格式如下: db.collection_name.aggregate(aggr
我有一个四阶段聚合查询,其形式为match->group->project->sort。聚合工作正常,并生成如下所示的数组。 下面是我的聚合查询。我有没有办法只显示“计数”字段大于500的结果?我试图添加到项目阶段,但没有运气。
我有一个“name”集合,当我执行POST调用时,我会搜索数据库中是否有与SSN匹配的记录,并创建一个具有相同name_id的记录,基本上是为了链接具有相同SSN的记录。 同时,我将为每个记录创建NameDetails。 它的目的是,当我通过SSN执行GET调用时,它应该从Name collection及其相应的NameDetails中获取所有具有匹配SSN的记录。 NameDetails集合:{
我尝试使用下面的elasticsearch查询来处理Spring数据。目的是为字段返回唯一的结果。就像与SQL数据库进行比较一样。 我将该字段配置为关键字,它使查询在api中完美运行,如下所示: 我的问题是,当我尝试使用StringQuery运行时,相同的查询在Spring数据中不起作用,我得到以下错误。我猜它使用不同的api来运行查询。 我尝试过使用类型来实现相同的结果,没有重复和没有对象加载,