是否可以“仅当”要索引的字段之一具有特定值时才索引集合的某些文档?
让我用一个例子来解释:
集合“posts”有数百万个文档,ALL 定义如下:
{ “网络”:“网络_1”, "blogname": "blogname_1", “post_id”:1234, “post_slug”:“abcdefg” }
假设帖子的分布在 network_1 和 network_2 上平均分配
我的应用程序经常根据“网络”的值选择查询类型(尽管有时我需要来自两个网络的数据):
例如:
www.test.it/network_1/blog_1/**postid**/1234/
-> db.posts.find ({network: "network_1" blogname "blog_1", post_id: 1234})
www.test.it/network_2/blog_4/**slug**/aaaa/
-> db.posts.find ({network: "network_2" blogname "blog_4" post_slug: "yyyy"})
我可以创建两个单独的索引(network / blogname / post_id 和 network / blogname / post_slug),但我会浪费大量 RAM,因为索引中 50% 的数据永远不会被使用。
有没有办法创建一个“过滤”的索引?
示例:(注意 WHERE 参数)
db.posts.ensureIndex ({network: 1 blogname: 1, post_id: 1}, {where: {network: "network_1"}})
db.posts.ensureIndex ({network: 1 blogname: 1, post_slug: 1}, {where: {network: "network_2"}})