0
`我在MongoDB中商家信息的列表,让每件物品包含以下字段:由城市,地址,状态搜索,MLS数
{
"city" : "Yucca Valley",
"county" : "San Bernardino",
"fullStreetAddress" : "7496 CHULA VISTA Avenue",
"state" : "CA",
"zipCode" : "92284",
"streetName" : "7496",
"streetNumber" : "CHULA VISTA",
"mls" : "41462506"
}
我有一个搜索输入,我想编写一个语句,按这个列搜索并返回结果。查询按空格分割searchQuery并按每个词搜索。 对于Yucca
它会返回正确的结果,但它对于Yucca Valley
或Yucca Valley CA
不正确。
这里是我的搜索查询:
var searchQuery = req.param('q') ? req.param('q').trim() : null;
if (searchQuery) {
var searchQueryArray = searchQuery.split(" ");
var page = req.param('page') ? req.param('page') : 1;
var pageData = {};
var query = Property.find()
searchQueryArray.forEach(
function (queryItem){
var orNumeric = [];
var orStrings = [];
console.log(queryItem);
// check, if word contains only numbers, compare it to numeric fields
if(/^\d+$/.test(queryItem)){
orNumeric.push({streetNumber: {like: "%" + queryItem + "%"}});
orNumeric.push({zipCode: {like: "%" + queryItem + "%"}});
orNumeric.push({mls: {like: "%" + queryItem + "%"}});
query.where({or: orNumeric});
} else {
orStrings.push({streetName: {like: "%" + queryItem + "%"}});
orStrings.push({city: {like: "%" + queryItem + "%"}});
orStrings.push({state: {like: "%" + queryItem + "%"}});
query.where({or: orStrings})
}
}
);
query.where({or: [
{"fullStreetAddress": {like: "%" + searchQuery + "%"}}
]});
我想,这是因为在过去where
覆盖以前的。任何人都可以建议如何修改这个查询,它会返回正确的结果。