使用mongodb在对象数组中搜索完全匹配

时间:2017-03-29 00:54:03

标签: jquery angularjs filter underscore.js

我正在查询数据库中的所有数据,并使用以下代码对其进行搜索。

问题在于它不会查询完全匹配,而是搜索关键字 如果我输入“dog colorado”,它将返回包含“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;
    }

2 个答案:

答案 0 :(得分:0)

好吧你正在使用mongodb,所以你需要使用带正则表达式的mongo查询系统来获得完全匹配。

db.collection.find({yourattributeyouwanttomatch: {$regex: new RegExp('^' +  query + '$', 'i')}})

如果您想要区分大小写,可以删除“i”,如果要匹配字符串中的任何位置,可以删除^和$。

答案 1 :(得分:0)

您可以使用它从mongo中的对象数组中搜索 例如:

{
  _id: 1,
  persons: [
            { name: 'ABC',
              age: 10
            },
            { name: 'ABD',
              age: 12
            }
          ]
}

mongo查询:

db.users.find({person: {$elemMatch: {name:'ABC', age:10}}})