阅读以下https://docs.mongodb.com/manual/core/index-text/#restrictions中可以阅读的mongo文档:
"排序操作无法从文本索引获取排序顺序,即使是复合文本索引也是如此;即排序操作不能使用文本索引中的排序。"
考虑到这一点,我将使用mongo客户端进行一些测试。
首先,我将创建一个文本索引:
db.collection.createIndex( { "product.title": "text" } )
然后我将尝试使用索引文本查找一些数据并在结果中应用某种排序:
db.collection.find( { $text: { $search: "SAR" } } ,{"product.title":1}).sort({"product.title":1})
该查询返回以下内容:
{"product" : { "title" : "SAR 1" } }
{"product" : { "title" : "SAR 2" } }
{"product" : { "title" : "SAR 3" } }
然后当我更改订单排序时:
db.collection.find( { $text: { $search: "SAR" } } ,{"product.title":1}).sort({"product.title":-1})
结果改变:
{ "product" : { "title" : "SAR 3" } }
{ "product" : { "title" : "SAR 2" } }
{ "product" : { "title" : "SAR 1" } }
所以,我可以使用文本索引并使用排序(文档说你不能)
文本索引和排序限制的目标是什么?我确定我不理解这个限制
答案 0 :(得分:1)
如果您通过MongoDB explainer运行该查询,它会告诉您确定发生了什么;但我猜是这样的:
在您的示例中,查询返回的文档数量非常少,排序时间不会很长。但是一个不同的查询,也许是一个聚合,它有一个必须对数千个文档进行排序的阶段,因为没有辅助排序,所以会很慢。