在MongoDB中使用多个参数进行搜索时如何知道哪个参数匹配

时间:2016-09-09 15:47:22

标签: javascript node.js mongodb mongoose

例如,如果我有一个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有没有返回每个结果中匹配的条件?或者我是否必须为此目的多次搜索数据库?

2 个答案:

答案 0 :(得分:2)

在MongoDB中创建文本索引时,分配给每个索引字段的默认权重为1。 但是,如果你想给一个特定的字段更多的权重,你可以在创建索引时包含权重选项,这样就可以解决这个问题。

{
db.yourCollection.createIndex(
   {
     title: "text",
     body: "text",

   },
   {
     weights: {
       title: 10,
       body: 5
     },
     name: "myIndex"
   }
 )
}

答案 1 :(得分:0)

afaik没有非文本索引的匹配率等功能。 (参见satish chennupati回答文本索引)

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