我可以将查询放在mongoose的查找运算符中吗?

时间:2018-06-05 10:53:02

标签: node.js mongodb

我们假设我有两个集合collection-Acollection-B,它们包含的数据如下例所示

  

收集-A

{adId:1,adName:'x'}
{adId:2,adName:'y'}
{adId:3,adName:'z'}
.
.
  

集合-B [此集合每行有数百万行 adId]

{adId:1, ip:'1.2.3.4',viewCount:2}
{adId:1, ip:'1.2.3.5',viewCount:3}
{adId:2, ip:'1.2.3.6',viewCount:1}
{adId:3, ip:'1.2.3.4',viewCount:1}
.
.

现在假设我想查询collection-A,以便我希望collection-AadId中没有相应collection-B行的所有行的名称{ {1}}和Ip: 1.2.3.4超过2个。

我已经编写了以下条件的MongoDB聚合查询,似乎有效

count

如果 [ { $match: {} }, { $lookup: { from:'collection-B', localField:"adId", foreignField: "adId", as:'transaction' } }, { $match:{ transaction:{ $not:{ $elemMatch:{ "ip":"1.2.3.4", count:{$gte:2} } } } } }, ] 中的匹配行数量为几千,但如果collection-B中的匹配行数为几十万/百万,则上面的查询可以正常工作,那么我会收到错误{{1我理解为什么,因为所有匹配的行被合并到一个数组中,并且数组被附加到collection-B的父行,因此超出了允许的最大文档大小。

我找到了另一个问题的解决方案,即在查找之后立即使用MongoError: Total size of documents exceeds maximum document size运算符,这与collection-A的每个对应行添加父$unwind行完全相反unwind解决了问题,但在这种情况下,要搜索的行数增加到如此大的程度,以至于搜索需要大约30秒。现在我正在考虑任何第三种方法,比如在查找运算符本身中放置搜索条件,但我不知道我是否可以在查找运算符内部使用搜索查询,我甚至不确定我的解决方案是否正确。

对于可能的解决方案的任何评论或暗示将不胜感激

0 个答案:

没有答案