我的节点模型包含以下属性
firstName
lastName
age
address
我需要使用mongoose find函数来使用firstName和lastName过滤用户。
我的UI只传递一个搜索参数。数据应按如下过滤
'fistName'喜欢'搜索参数'& lastName喜欢'搜索参数'。
我通过以下对象来查找功能。它对我不起作用。
var criteria = {
'firstName' : req.body.customerName ? { $regex: req.body.customerName, $options: 'i' } : null ,
'lastName' : req.body.customerName ? { $regex: req.body.customerName, $options: 'i' } : null
};
答案 0 :(得分:10)
如果您希望获得数据,如果与<{1}}和firstName
两个字段匹配,那么您可以将lastName
运算符与$and
一起使用。
$regex
如果您希望获得数据,如果与var query = {$and:[{firstName:{$regex: req.body.customerName, $options: 'i'}},{lastName:{$regex: req.body.customerName, $options: 'i'}}]}
和firstName
的任何一个匹配,那么您可以lastName
运算符与$or
一起使用}。
$regex
所以可以试试这段代码:
var query = {$or:[{firstName:{$regex: req.body.customerName, $options: 'i'}},{lastName:{$regex: req.body.customerName, $options: 'i'}}]}
答案 1 :(得分:1)
所以,我认为除了语法缺陷之外,你还有一个逻辑缺陷。除非你故意只寻找具有相同名字和姓氏的人(例如汤姆汤姆),否则你永远不会找到任何人,只需在每个字段中查找具有相同值的每个字段。如果,正如我怀疑的那样,您确实想要采用搜索条件并查看用户是否在 中使用他们的名字或姓氏,那么您实际上想要使用{{1} }。
类似的东西:
$or
答案 2 :(得分:0)
var query = {}
if(req.body.customerName) {
query = {
firstName :new RegExp('^'+req.body.customerName+'$', "i"),
lastName : new RegExp('^'+req.body.customerName+'$', "i")
}
}
MyModel.find(query , function (err, data) {
// data.forEach
});
答案 3 :(得分:0)
您可以尝试通过以下条件
var criteria = {
'firstName' : req.body.customerName ? {$regex: req.body.customerName + '.*', $options: 'i'} : null ,
'lastName' : req.body.customerName ? {$regex: req.body.customerName + '.*', $options: 'i'} : null
};