【问题标题】:Find an exact match from search in array of objects using mongodb使用 mongodb 在对象数组中查找完全匹配
【发布时间】:2017-08-22 06:52:55
【问题描述】:

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

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

【问题讨论】:

  • 您需要后端服务方面的帮助吗?您需要提供该代码。
  • 我认为过滤可以在前端@JoshuaJWilborn 上完成。我认为我的退货声明存在问题。我希望它的功能如下“返回与搜索完全匹配的数据”
  • 但是如果您向后端提供搜索参数,为什么它会返回所有内容?或者您希望它返回匹配两个单词的所有内容,然后将其过滤到前面的完全匹配?我觉得你的问题不够准确。
  • 很公平@JoshuaJWilborn。我想一个更具体的问题是我如何在后端查询完全匹配?我可以显示什么代码以获得帮助
  • 好的,用后端框架类型、相关路由和您正在与之交互的数据库类型修改您的问题。然后也添加您的具体问题。谢谢。

标签: jquery angularjs filter underscore.js


【解决方案1】:

好的,您使用的是 mongodb,因此您需要使用带有正则表达式的 mongo 查询系统来获得精确匹配。

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

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

【讨论】:

  • 真的很感激
【解决方案2】:

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

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

mongo 查询:

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

【讨论】:

    猜你喜欢
    • 2014-05-07
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 2021-04-06
    相关资源
    最近更新 更多