假设我有一个包含 1000 万个文档的集合,看起来像这样:
{
"_id": "33393y33y63i6y3i63y63636",
"Name": "Document23",
"CreatedAt": "5/23/2006",
"Tags": ["website", "shopping", "trust"],
"Keywords": ["hair accessories", "fashion", "hair gel"],
"ContactVia": ["email", "twitter", "phone"],
"Body": "Our website is dedicated to making hair products that are..."}
我希望能够在数据库中查询任意数量的标签、关键字和 ContactVia 的 3 个属性中的任何一个,包括 0 个。我需要能够通过 ANDS(本文档包括 X 和 Y 的两个属性)或 OR(本文档包括 X OR Y 的属性)进行选择。
示例查询:
给我前 10 个具有标签 website 和 shopping 的文档,关键字匹配“hair Accessories or fashion”,contact_via 包括“email”。
给我另外 20 个带有标签“网站”或“信任”的文档,匹配关键字“发胶”或“发饰”。
给我 50 个带有“网站”标签的文档。
我还需要按文档中的其他字段(分数类型)或创建或更新日期对这些进行排序。所以基本上有四个定期查询的“范围”。
我一开始是基于 SQL 的。然后,我搬到了 Mongo,因为它支持数组和哈希(我喜欢)。但是,它不支持使用索引的多个范围,所以我的 Mongo 数据库很慢..因为它不能使用索引并且必须扫描 1000 万个文档。
有没有更好的选择。这阻碍了将该应用程序投入生产(以及随之而来的收入)。任何关于正确数据库或替代架构的想法将不胜感激。
如果这很重要,我在 Ruby/Rails 中。