在MongoDB中,当用多个参数进行search时,如何知道哪个参数匹配

例如,如果我有一个像标题和正文字段的Mongoose模式:

var Datum = db.model('Datum', { title: { type: String }, body: { type: String }, } 

现在我想要search这两个字段的子string,我可以这样做:

 Datum.find({ { $or: [ { title: substring }, { body: substring } ] } }, function(results) { console.log(results) }) 

但是我想给冠军一个更大的分量,所以对于两个项目,如果一个title匹配,另一个匹配body ,我希望前者返回更高的顺序。

反正有mongoDB返回每个结果匹配的条件吗? 或者我为此需要多次search数据库?

当你在MongoDB中创build文本索引时,分配给每个索引字段的默认权重是1.但是如果你想赋予一个特定的字段更多的权重,你可以在创build索引时包括权重选项,这将为你做诡计。

 { db.yourCollection.createIndex( { title: "text", body: "text", }, { weights: { title: 10, body: 5 }, name: "myIndex" } ) } 

afaik没有像非文本索引匹配率的函数。 (见satish chennupati答案为文字索引)

为了弥补这一点,mongo响应需要在客户端进行处理,以避免昂贵的服务器调用,并依赖于需要执行的文档头号检查或循环。