我尝试在MongoDB上使用复合文本索引进行查询,如下所示:
index : {name : 'text' , createdAt:'-1'}
字符串这将为 name 和 createdAt 字段创建一个复合索引,但是当我试图查询这些字段时,它使用的是内存排序,尽管我在复合索引中定义了排序顺序。1x个月我检查了MongoDB文档,但没有找到任何与我的用例相匹配的用例。我希望通过上面的复合索引删除内存中的文本搜索排序。
91zkwejq1#
从MongoDB文档(https://www.mongodb.com/docs/manual/core/indexes/index-types/index-text):
对于包含文本索引键沿着其他类型键的复合索引,只有文本索引字段确定索引是否引用文档。其他键不确定索引是否引用文档。检查explain(true),发现只使用了索引的text部分。尝试聪明地将复合索引的顺序切换为:
explain(true)
text
db.foo.createIndex({createdAt:-1,name: "text"});
字符串并发出:
db.foo.find( { "createdAt":{$gt:0}, $text: { $search: "coffee" } } ).sort({createdAt:-1}).explain(true);
型产生此错误,因为需要createdAt * 相等 *,而不是范围运算符($gt)。
createdAt
$gt
Proj: {} planner returned error :: caused by :: failed to use text index to satisfy $text query (if text index is compound, are equality predicates given for all prefix fields?)
型
1条答案
按热度按时间91zkwejq1#
从MongoDB文档(https://www.mongodb.com/docs/manual/core/indexes/index-types/index-text):
复合文本索引
对于包含文本索引键沿着其他类型键的复合索引,只有文本索引字段确定索引是否引用文档。其他键不确定索引是否引用文档。
检查
explain(true)
,发现只使用了索引的text
部分。尝试聪明地将复合索引的顺序切换为:字符串
并发出:
型
产生此错误,因为需要
createdAt
* 相等 *,而不是范围运算符($gt
)。型