0

我在 MongoDB 中有一个“单词”集合。当我想搜索集合时,我想列出以“单词”开头的第一个单词,然后包含我查询的“单词”。在同一个数组中,我得到了这个结果;“simarte”、“Cumartesti”、“Mart”、“marti”、“martilar”。当我使用 contains 进行搜索时,它会给我带来包含“单词”(mart)的其他单词。

我想首先订购以“单词”开头的单词,而不是“包含”单词。是否可以在一个查询中做到这一点?我不想向 db 发出第二个请求。

这是我的代码示例:

    var word = "mart";
    db.words.find({"w" : {$regex : ".*" + word + ".*"}}, function(err, words) {
      if( err || !words) console.log("No data found");
      else{
       res.render('index', { title: 'Words', word_data: words, word : word });
     }
    });
4

1 回答 1

0

我相信这是不可能的,因为如果你按w字段排序,mongodb 会考虑排序的第一个字母(如果第一个等于第二个字母,等等)。

也许文本搜索可以帮助你。它在结果中包含一个score字段,您可以按它进行排序。正如@WiredPrairie 指出的那样,文本搜索还没有准备好生产,所以要小心。另一种选择是以编程方式对结果进行排序。

在这里您可以找到更多相关信息:

http://docs.mongodb.org/manual/core/text-search/

使用 MongoDB 全文搜索进行排序

于 2013-07-04T11:31:20.860 回答