mongoose 为什么我的MongoDB查询使用内存排序和复合文本索引?

30byixjq  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(134)

我尝试在MongoDB上使用复合文本索引进行查询,如下所示:

index : {name : 'text' , createdAt:'-1'}

字符串
这将为 namecreatedAt 字段创建一个复合索引,但是当我试图查询这些字段时,它使用的是内存排序,尽管我在复合索引中定义了排序顺序。
1x个月
我检查了MongoDB文档,但没有找到任何与我的用例相匹配的用例。我希望通过上面的复合索引删除内存中的文本搜索排序。

91zkwejq

91zkwejq1#

从MongoDB文档(https://www.mongodb.com/docs/manual/core/indexes/index-types/index-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)。

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?)

相关问题