Javascript 在MongoDB中搜索多个参数时如何知道哪个参数匹配
例如,如果我有一个Mongoose模式,其中包含title和body等字段:Javascript 在MongoDB中搜索多个参数时如何知道哪个参数匹配,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,例如,如果我有一个Mongoose模式,其中包含title和body等字段: var Datum = db.model('Datum', { title: { type: String }, body: { type: String }, } 现在我想在两个字段中搜索一个子字符串,我可以这样做: Datum.find({ { $or: [ { title: substring }, { body: substring } ] } }, function
var Datum = db.model('Datum', {
title: { type: String },
body: { type: String },
}
现在我想在两个字段中搜索一个子字符串,我可以这样做:
Datum.find({
{ $or: [ { title: substring }, { body: substring } ] }
},
function(results) {
console.log(results)
})
但我想赋予标题更大的权重,因此对于两个条目,如果一个在标题
中匹配,另一个在正文
中匹配,我希望前者以更高的顺序返回
mongoDB是否可以返回每个结果中匹配的条件?或者我必须为此目的多次搜索数据库吗?在MongoDB中创建文本索引时,分配给每个索引字段的默认权重为1。 然而,如果您想给某个特定字段更多的权重,您可以在创建索引时包含权重选项,这将为您带来好处
{
db.yourCollection.createIndex(
{
title: "text",
body: "text",
},
{
weights: {
title: 10,
body: 5
},
name: "myIndex"
}
)
}
afaik对于非文本索引没有类似匹配率的函数。(文本索引见satish chennupati答案) 为了解决这个问题,mongo响应需要在客户端进行处理,以避免昂贵的服务器调用,这取决于需要执行的第一个文档检查或循环。示例:db.articles.find({$text:{$search:{$cake}},{score:{$meta:{$textcore})