所以我遇到了一个奇怪的问题而且我还没弄清楚。我有一个mongoose模式,大约有20个键,我想在其中5个使用$ text查询,它看起来像这样:
$(document).ready(function(){
var validations = [];
$('#inp').keypress(function(e){
if(e.which == 13){
e.preventDefault();
scanValidation(validations, function(valid){
validations = valid;
});
}
});
}):
function scanValidation(valid, cb){
var scanval = $('#inp').val();
if(valid.includes(scanval)){
//display error
}
else{
var validarr = valid.slice();
validarr.push(scanval);
var myData=JSON.stringify({ "name":"user1", "validations":validarr});
//Makes an ajax call to see if the sent array validarr is a valid request
apiCall(myData,'scanValidation',function(decoded) {
if (decoded.Status!="ERROR") {
valid = validarr;
}
else {
//display error
}
return(cb(valid));
});
}
}
然后在我的路径文件中执行以下查询:
var mySchema = new mongoose.Schema({
firstkey:{type: String, index: true},
secondkey:{type:String,index: true},
thirdkey:{type:String,index: true},
fourthkey:{type:String,index: true},
fifthkey:{type:String,index: true},
sixth:String,
seventh:String,
.... });
mySchema.index=({'firstkey':'text','secondkey':'text','thirdkey':'text','fourthkey':'text','fifthkey':'text'})
module.exports = mongoose.model("Schema", mySchema);
我从页面中的搜索表单中获取if (req.query.search) {
Schema.find({ $text: { $search: req.query.search } }, function (err, allRecords) {
if (err) {
console.log(err);
} else {
res.render("records/index", { records: allRecords });
}
});
}
的值,无论如何,如果我在表单中输入的单词是可以在firstkey中找到的值,我得到正确的结果没有问题,但是如果我输入一个我知道存在于其他一个键上的值,我的查询变为空。
为什么$ text没有查看我试图索引的其他键?
答案 0 :(得分:0)
我能够弄清楚,在创建模式的某个时刻创建了一个不同的索引,只选择了第一个键的是罪魁祸首,所以我擦除了所有索引并从控制台创建了我想要的索引现在我很高兴去!