我需要在MongoDB中存储每个对象的信息。每个对象可以有可变数量的属性,每个属性名称也可以不同。
对象1:
- 名称:"橱柜编号1"
- 类型:"橱柜"
- 材料:" Wood"
- 尺寸:" 12X15"
- 建立于:" 2014年2月2日"
- id:12212
对象2:
- 姓名:" Tommy"
- 类型:" Pet"
- 所有者:" Tom"
- 出生:" 2010年6月1日"
- id:12321
因此每个对象可能具有不同的属性/字段。我希望通过过滤任何属性组合来灵活地查询此数据库。由于数据库可能非常庞大,我希望数据检索速度快,我希望能够进行某种索引以加快查询速度。
示例查询可能是:
- 搜索所有材料=" Wood"并输入="表"
- 搜索所有类型=" Dog"和老板="哈利"
我在考虑使用一个集合,其中所有属性都可以放在一个对象中,但无法看到索引是如何实现的。我显然可以将对象分解为单个属性对象然后存储它,这意味着有这样的东西:
对象1有多个单独的对象:
- {" attr_name" :" name"," attr_value" :" Cupboard Number 1"," id" :12212}
- {" attr_name" :"输入"," attr_value" :"橱柜"," id" :12212}
- {" attr_name" :"材料"," attr_value" :" Wood"," id" :12212}
- {" attr_name" :"尺寸"," attr_value" :" 12X15"," id" :12212}
- {" attr_name" :"建立在"," attr_value" :" 2014年2月2日"," id" :12212}
现在我可以在attr_name上创建索引并获取' id',我可以使用它来收集该对象的所有记录。但是,这不会超出一个属性,而我的要求是在一个查询中过滤多个属性。
我想要一些如何构造整个对象(不像这里那样分解它)并且仍然能够创建索引。有什么线索可以做到吗?如何解决这些问题呢?是否有任何NOSQL /其他方法来解决此类问题?如果以某种方式为此服务,我愿意使用另一个数据库。