首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >联合搜索帆js

联合搜索帆js
EN

Stack Overflow用户
提问于 2015-09-14 11:56:20
回答 1查看 584关注 0票数 1

我有游戏收藏:

代码语言:javascript
复制
{
  "name": "Play RoadRash",
  "version": "1.0.0",
  "icon": "image-md-two-thirds.png",
  "id": "6dc41c3fa0e7"
}

和平台收集:

代码语言:javascript
复制
{
  "name": "PlayStation",
  "version": "7",
  "icon": "playstation.jpg",
  "id": "55eaf322f1a16"
}

我正在尝试创建一个基于名称参数在两个集合中搜索的搜索查询。有没有人知道如何在帆船水系中搜索多个集合?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-15 07:32:21

我们已经编写了一个控制器,在所有模型中都有全文搜索。它所做的就是通过请求中的q参数在所有模型及其属性中进行搜索。以下是此控制器的完整代码:

代码语言:javascript
复制
var _ = require('lodash');
var Promise = require('bluebird');

module.exports = {
  index: function (req, res) {
    var models = [];

    if (!req.param('q')) {
      return res.badRequest(null, null, 'You should specify a "q" parameter!');
    }

    var q = req.param('q');

    if (req.param('model')) {
      var modelStr = req.param('model').toString().toLowerCase();

      if (!(modelStr in sails.models)) {
        return res.badRequest(null, null, 'Cannot find model: ' + modelStr);
      }

      models.push({name: modelStr, model: sails.models[modelStr]});
    } else {
      _.forEach(sails.models, function (model, modelStr) {
        models.push({name: modelStr, model: model});
      });
    }

    Promise.map(models, function (modelObj) {
      var model = modelObj.model;
      var modelStr = modelObj.name;
      var where = _.transform(model.definition, function (result, val, key) {
        result.or.push(_.set({}, key, {contains: q}));
      }, {or: []});

      return model
        .find(where)
        .then(function (queryRes) {
          var resObj = {};
          resObj[modelStr] = queryRes;
          return Promise.resolve(resObj)
        });
    })
      .then(function (searchRes) {
        return _.transform(searchRes, function (result, val) {
          result = _.merge(result, val);
        }, {});
      })
      .then(res.ok)
      .catch(res.serverError)
  }
};

你可以把它复制粘贴到你的api/controllers/SearchController.js中,就这样。它仍然需要重构这段代码,但它可以工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32564205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档