【发布时间】:2014-09-22 18:23:54
【问题描述】:
`我在mongodb中有一个listing列表,所以每个listing都包含以下字段:
{
"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 覆盖了之前的。谁能建议如何修改此查询以使其返回正确的结果。
【问题讨论】:
标签: jquery node.js mongodb search sails.js