例如,如果我有一个Mongoose模式,其中包含标题和正文等字段:
var Datum = db.model('Datum', {
title: { type: String },
body: { type: String },
}
现在我想在两个字段中搜索子字符串,我可以这样做:
Datum.find({
{ $or: [ { title: substring }, { body: substring } ] }
},
function(results) {
console.log(results)
})
但是我想给予标题一个更大的权重,所以对于两个条目,如果一个匹配title
,另一个匹配body
,我就像前者一样以更高的顺序返回。
mongoDB有没有返回每个结果中匹配的条件?或者我是否必须为此目的多次搜索数据库?
答案 0 :(得分:2)
在MongoDB中创建文本索引时,分配给每个索引字段的默认权重为1。 但是,如果你想给一个特定的字段更多的权重,你可以在创建索引时包含权重选项,这样就可以解决这个问题。
{
db.yourCollection.createIndex(
{
title: "text",
body: "text",
},
{
weights: {
title: 10,
body: 5
},
name: "myIndex"
}
)
}
答案 1 :(得分:0)
afaik没有非文本索引的匹配率等功能。 (参见satish chennupati回答文本索引)
为了弥补这一点,需要在客户端处理mongo响应,以避免昂贵的服务器调用,并且依赖于需要执行的文档第一个检查或循环。