在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响应需要在客户端进行处理,以避免昂贵的服务器调用,并依赖于需要执行的文档头号检查或循环。