如何(轻松)基于MongoDB中引用的文档进行过滤

时间:2019-09-10 07:17:08

标签: database mongodb join

规格

使用MongoDB 4.0.12。 Mongoose在后端使用NodeJS

上下文

我有一个数据表,其中显示了我们通过应用程序提供的recommendations

每个recommendation都有一组与其自身相关的属性。像

  • 创建/更新日期
  • 满意率
  • 推荐的衣服

我的数据表的每一列都有过滤器。

目前我知道

  1. 使用find命令查询这些过滤器
  2. 排序
  3. 限制

问题

现在,我想根据接收recommendations的{​​{1}}来过滤user

例如,我只想过滤recommendations男性users的男性$lookup,这些男性已经激活了电子邮件并且在过去30天内一直活跃。

在网上阅读了很多书之后,看来我想做的事情比我现在使用的要困难得多。

据我了解,我必须将过滤器查询转换为汇总查询并使用ObjectId(...)

我曾经玩过它(不是很熟悉),但是遇到了让我不敢使用它的问题。像这样的东西:

  • 当我有一个包含$lookup的字段时,如果对它进行查找,它将返回一个长度为1的数组,其中包含引用的文档。这意味着我必须手动将其从文档数组转换为自己的代码。这也意味着我的代码需要知道确切的模式。
  • 进行嵌套$lookup也是另一个问题。现在,我需要在父localField内放置一个管道,并将foreignFieldlet转换为$expr,这意味着我必须在$lookup中使用{子$unwind进一步增加了复杂性
  • 我不太了解mongoose的工作原理以及如何在代码中确定何时使用它们

主要问题是我的代码与模式无关,并且必须针对用户在数据表中确定的任何类型的过滤器生成查询。而且,由于管道形状对查询的嵌套级别非常敏感,因此使生成正确的查询成为我不确定自己能够管理的复杂任务。

问题

我该如何最好地解决这个问题?

  1. 我应该限制数据表中的过滤器数量并自己创建模板查询吗?
  2. 我应该在客户端做些事情,方法是用[sift.js][1]填充字段,然后在代码中过滤它们(可能使用double之类的库,这样我只需要处理一种查询语法)
  3. 还有其他方法可以解决这个问题吗?

0 个答案:

没有答案