【问题标题】:How bind search values in mongodb with mongoose如何将 mongodb 中的搜索值与 mongoose 绑定
【发布时间】:2015-03-22 00:16:03
【问题描述】:

我的 /search/:query 路由中有以下代码:

var param = {
    query: req.query['query']
}

MyModel.find({
        "$or": [
            { 'name': req.param.query },
            { 'age': req.param.query  },
            { 'event': req.param.query },
        ]
    }, function (err, results) {
        if (err) {
            console.log(err)
        }
        else {
            res.render('index', { 
                data: results
            });
        }
    }
);

很好,我几乎可以搜索我想要的所有数据,但只能单独搜索。如果我想要搜索姓名+年龄怎么办,可以吗?示例:“狮子座 22”。

猫鼬有什么方法可以帮助我解决这个问题吗?

更新:

我的问题是:

我有表格列出它的标题,这个标题是'eventName'和'eventDate'的串联。

这个领域的真实例子:

'特别活动 - 20/12/2015' '经典活动 - 2015 年 12 月 3 日' '炎热的夏季活动 - 05/07/2005'

每周将创建 4 个事件。在某些时候,用户会搜索一个旧事件,我相信用户会以这种格式搜索:'EVENT NAME - EVENT DATE'..

所以我需要一种方法在我的控制器中绑定这些值。

【问题讨论】:

  • 我们在这里不做读心术,尽管我承认它通常很有用。至少我的 X 教授的能力在这里不起作用,所以请: 1. 用例子清楚地解释你想要达到的目标。 2. 如果您对作为“查询”提交的数据类型有一些概念,请显示出来。 3. 不要评论!请多加注意地提出问题并解释您想要什么。
  • 更新我的答案@NeilLunn

标签: javascript node.js mongodb mongoose


【解决方案1】:

我不熟悉mongoose,但为了做到这一点,您必须有一种方法将您的查询参数绑定到您要搜索的属性。否则,他们不会知道Leo 是姓名,22 是年龄。

你的路径类似于search?name=:name&age=:age&event=:event,并且在您的代码中,如果参数不是null,您必须进行处理,添加和条件。

【讨论】:

  • 哦,我迟到了 20 秒。 (+1)
【解决方案2】:

您似乎只使用一个参数 (req.param.query) 来过滤所有属性。这与猫鼬无关:您可以为每个属性创建不同的参数并将它们传递给查询字符串。

例如:

"$or": [
        { 'name': req.param.name },
        { 'age': req.param.age  },
        { 'event': req.param.event },
    ]

你的 HTTP 请求会是这样的:

http://youraddress/expressRoute?name=Leo&age=22

【讨论】:

  • 太好了,太完美了!
猜你喜欢
  • 1970-01-01
  • 2022-07-22
  • 2015-06-21
  • 2017-05-14
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
相关资源
最近更新 更多