首页 > 解决方案 > Mongo 在文档中存储过滤器

问题描述

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

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

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

标签: mongodbperformancenosql

解决方案


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

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

然后你的查询变成

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

推荐阅读