使用 mongodb 在对象数组中查找完全匹配项
Find an exact match from search in array of objects using mongodb
我正在查询我的数据库中的所有数据,并运行使用以下代码对其进行搜索。
问题是它不是查询完全匹配,而是关键字搜索。
如果我输入 "dog colorado",它会 return 包含单词 "dog" 和 "colorado".
的所有结果
我希望 return 结果 "dog colorado"。
我正在使用Mongodb作为参考
$http.get('/sapi/search/contractors?query=' + $scope.data.query)
.then(function(res) {
console.log("response from query", res.data);
// if it gets all the data
if (res.data.users && res.data.users.length) {
$scope.items = _.filter(res.data.users, function(user) {
return user.roles && user.roles.indexOf('contractor') !== -1 && user.firstName;
});
} else {
console.log('no items', res);
$scope.items = null;
}
好的,您正在使用 mongodb,因此您需要使用带有正则表达式的 mongo 查询系统来获得精确匹配。
db.collection.find({yourattributeyouwanttomatch: {$regex: new RegExp('^' + query + '$', 'i')}})
如果您想要区分大小写,您可以删除 'i',如果您想要匹配字符串中的任何位置,您可以删除 ^ 和 $。
您可以使用它来搜索 mongo 中的对象数组
例如:
{
_id: 1,
persons: [
{ name: 'ABC',
age: 10
},
{ name: 'ABD',
age: 12
}
]
}
mongo查询:
db.users.find({person: {$elemMatch: {name:'ABC', age:10}}})
我正在查询我的数据库中的所有数据,并运行使用以下代码对其进行搜索。
问题是它不是查询完全匹配,而是关键字搜索。
如果我输入 "dog colorado",它会 return 包含单词 "dog" 和 "colorado".
我希望 return 结果 "dog colorado"。
我正在使用Mongodb作为参考
$http.get('/sapi/search/contractors?query=' + $scope.data.query)
.then(function(res) {
console.log("response from query", res.data);
// if it gets all the data
if (res.data.users && res.data.users.length) {
$scope.items = _.filter(res.data.users, function(user) {
return user.roles && user.roles.indexOf('contractor') !== -1 && user.firstName;
});
} else {
console.log('no items', res);
$scope.items = null;
}
好的,您正在使用 mongodb,因此您需要使用带有正则表达式的 mongo 查询系统来获得精确匹配。
db.collection.find({yourattributeyouwanttomatch: {$regex: new RegExp('^' + query + '$', 'i')}})
如果您想要区分大小写,您可以删除 'i',如果您想要匹配字符串中的任何位置,您可以删除 ^ 和 $。
您可以使用它来搜索 mongo 中的对象数组 例如:
{
_id: 1,
persons: [
{ name: 'ABC',
age: 10
},
{ name: 'ABD',
age: 12
}
]
}
mongo查询:
db.users.find({person: {$elemMatch: {name:'ABC', age:10}}})