如何在mongodb数组文本字段中逐字符搜索?

时间:2018-11-05 04:35:08

标签: mongodb mongodb-query

我在mongodb中的文档如下:

[{
  "_id" : 1,
  "name" : "Himanshu",
  "tags" : ["member", "active"]
},{
  "_id" : 2,
  "name" : "Teotia",
  "tags" : ["employer", "withdrawal"]
},{ 
  "_id" : 3,
  "name" : "John",
  "tags" : ["member", "deactive"]
},{
  "_id" : 4,
  "name" : "Haris",
  "tags" : ["employer", "action"]
}]
  1. 我想在这里搜索的是如果我们有{"tags" : ["member", "act"]}这样的过滤器数组,它将返回ID的12,因为这里member是完全匹配的,{ {1}}在两个文档中部分匹配。
  2. 如果我有类似act的过滤器,则它应该回复id的{"tags" : ["mem"] }1
  3. 还有一种情况,如果我有类似3的过滤器,那么它应该只回答{"tags" : ["member", "active"]}

1 个答案:

答案 0 :(得分:2)

这里您基本上需要两个概念。

  1. 将数组的每个输入字符串转换为锚定在字符串“开始”位置的正则表达式:

  2. 使用$all运算符应用列表,以确保“所有”匹配:

    var filter = { "tags": [ "mem", "active" ] };
    
    // Map with regular expressions
    filter.tags = { "$all": filter.tags.map(t => new RegExpr("^" + t)) };
    // makes filter to { "tags": { "$all": [ /^mem/, /^active/ ] } }
    
    // search for results
    db.collection.find(filter);
    
相关问题