【问题标题】:Search query string from array list of string of different objects in mongodb从mongodb中不同对象的字符串数组列表中搜索查询字符串
【发布时间】:2017-06-24 17:03:18
【问题描述】:

我想根据存储在所有对象数组中的字符串数组搜索查询字符串

我的数据库结构是这样的

[0: 
     destination: ......
     name: ......
     name_list: [""some place", "some place 2", "some place3"]
1:
    destination: ......
    name: ......
    name_list: [""some place4", "some place 5", "some place3"]
2:
    destination: ......
    name: ......
    name_list: [""some place56", "some place 34", "some place3"]

and so on .... 
]

我们说

我想获取 name_list 数组包含字符串“someplace3”的所有对象,但我将收到的查询可能只是“place3”,因为用户可能不知道完整或确切的名称。我不知道如何搜索,我正在使用 expressjs 模块在我的 mongodb 数据库中搜索:

route.find({name_list: "place3"}, function(err, routes) {
    if (err) throw err;
    routeTosend = routes;
});

但显然我没有得到任何结果,但如果我完全像 someplace3 那样搜索它会返回所有对象。

我对数据库完全陌生,因此也是 mongodb,如果有人可以提供帮助,我将不胜感激。

【问题讨论】:

    标签: node.js mongodb mongodb-query


    【解决方案1】:

    你必须使用 mongodb 提供的$regex。你可以这样做

    route.find({"name_list": {$regex : /.*places3.*/}}, function(err, routes) {
       if (err) throw err;
       routeTosend = routes;
    });
    

    要在正则表达式中使用变量,您必须使用 RegExp 构造函数从字符串创建正则表达式对象

    var query= "place"; 
    regx = new RegExp('.*' + query + '.*','i');
    
    route.find({"name_list": regx}, function(err, routes) {
       if (err) throw err;
       routeTosend = routes;
    });
    

    【讨论】:

    • 感谢您的帮助,工作完美,但我也可以在正则表达式中传递变量吗?
    • 要在正则表达式中使用变量,您必须使用 RegExp 构造函数从字符串创建正则表达式对象,例如 {"name_list" : new RegExp(your_reg_variable)}
    • 类似var myquery = "place"; {"name_list" : new RegExp(myquery )},但它不起作用,请你帮我看看。
    • 尝试在 myquery 变量或构造函数中连接模式
    • 是的,明白了,使用 ` var query="place"; regx = new RegExp('.*' + variable + '.*','i');`,谢谢你的帮助,你能不能也用这个来更新答案。
    猜你喜欢
    • 2013-04-11
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    相关资源
    最近更新 更多