【问题标题】:Mongo Storing filters in documentMongo 在文档中存储过滤器
【发布时间】:2020-04-19 17:32:06
【问题描述】:

我必须在 mongo 中存储一些模板数据并限制文档的年龄范围。下面的示例文档。

{
_id: ObjectId("unique123..."),
other data...,
filters : {
   age : {
      min : 18,
      max : 23
   }
},
{
_id: ObjectId("unique234..."),
other data...,
filters : {
   age : {
      min : 20,
      max : 40
   }
}

现在我可以使用{ $and : [{"filters.age.min": {$lt : 26}}, {"filters.age.max": {$gt : 26}}] } 查询所有模板,例如年龄 26。 有没有更高效的文档存储方式?

【问题讨论】:

  • 我不确定,但看看这个:Implement Field Level Redaction in MongoDB.
  • IMO,只需将年龄存储在顶级字段中。并将过滤器模板作为您的常量(在您使用 mongodb e:g: 节点的语言/环境中),并根据这些过滤器模板准备查询。解决这个问题 - 您可能不想仅仅因为稍后这些过滤器阈值更改为其他内容而更改存储的数据。

标签: mongodb performance nosql


【解决方案1】:

在对您的数据模型了解不多的情况下,我只能根据我对您文档的有限知识提出以下建议:

  • “过滤器”嵌套对象在您的文档对象中似乎不合适。过滤器总是会在查询本身中设置,因此数据库中的目标文档应该与这些无关。看起来你里面只有一个元素:年龄,这似乎有点矫枉过正。我再次根据提供的信息做出假设。
  • 如果每个文档都需要有一个最大和一个最小年龄,为什么不将它们都存储为根级别的“minAge”和“maxAge”?

那么你的查询就变成了

{ $and : [{"minAge": {$lt : 26}}, {"maxAge": {$gt : 26}}] }

【讨论】:

  • 其实我有更多的过滤器,比如年龄范围,比如允许的城市、排名范围等,所以我想以一种有条理的方式存储它们以进行有效的查询。
  • 您能否提供一些有关您的数据模型的更多信息以及您希望针对它运行的查询的一些上下文?
猜你喜欢
  • 1970-01-01
  • 2015-12-30
  • 2018-01-07
  • 2019-09-21
  • 2021-06-29
  • 2022-07-06
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
相关资源
最近更新 更多