Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 数组下的Mongodb条件查询搜索_Regex_Mongodb_Search - Fatal编程技术网

Regex 数组下的Mongodb条件查询搜索

Regex 数组下的Mongodb条件查询搜索,regex,mongodb,search,Regex,Mongodb,Search,我有一个数组所在的数据。在那个数组下有许多对象数组。我提到原始数据,以便任何人都能猜出结构 { _id: ObjectId(dfs45sd54fgds4gsd54gs5), content: [ { str: "Hey", isDelete: false }, { str: "world", isDelete: true } ] } 所以我想搜索任何匹配的字符串,我在数组下有顶部搜索 所以我的问题是这样的: let sear

我有一个数组所在的数据。在那个数组下有许多对象数组。我提到原始数据,以便任何人都能猜出结构

{
 _id: ObjectId(dfs45sd54fgds4gsd54gs5),
 content: [
 {
  str: "Hey",
  isDelete: false 
 },
 {
  str: "world",
  isDelete: true
 }
]
}
所以我想搜索任何匹配的字符串,我在数组下有顶部搜索

所以我的问题是这样的:

let searchTerm = req.body.key;
db.collection.find(
 {
  'content.str': {
    $regex: `.*\\b${searchTerm}\\b.*`,
    $options: 'i',
   }
 }
)
这将返回数据。现在由于某种原因,如果
isDelete:false
,我必须搜索数据

现在它返回数据isDelete是否为真/假,因为我没有提到条件

有谁能帮我解决这个问题,让数据通过条件。我只希望这是Mongodb查询


非常感谢您的帮助。

您可以在下面添加另一个条件

db.test2.find({
  $and: [
    {
      "content.str": {
        $regex: "hey",
        $options: "i",
        
      }
    },
    {
      "content.isDelete": false
    }
  ]
},
{
    'content.$':1 //Projection - to get only matching array element
})
运算符将包含数组字段的文档与至少一个匹配所有指定查询条件的元素相匹配

db.collection.find({
  content: {
    $elemMatch: {
      isDelete: true,
      str: {
        $regex: `.*\\b${searchTerm}\\b.*`,
        $options: "i"
      }
    }
  }
},
{
  "content.$": 1
})

工作场所:

我尝试了这个方法,但它不起作用,因为这个搜索正在数组下运行。如果它喜欢直接输入(没有嵌套结构),那么它可以工作。我试过了,你能解释一下直接输入是什么意思吗?比如普通的键和值(普通的JSON结构)。无论如何,我再次尝试了这一点,但这将返回其isDelete:true值的条目,我不希望在响应中使用该值,因为我假设该条目是从中删除的DB@Gibbs我很兴奋,这个位置运算符在投影中是如何工作的?我试过了,但和我在问题中提到的情况一样。我在投影时返回主id。因此,如果该关键字被删除,则响应返回空数组,作为在前端显示时未找到的数据。我也试过你的条件和投影,但不起作用。我也很惊讶为什么没有发生这种事情。您可以在正则表达式中使用前瞻断言。示例-(世界)。*\s+(?=isDelete:false)。所以,首先正则表达式查找world,当它找到它时,它开始查找isDelete:false,然后它只在条件满足时返回一个匹配项,否则它不会导致错误match@rootkonda感谢您的回复,我尝试了这个,但没有成功。您可以将您尝试的内容粘贴到这里吗?让searchTerm=
${req.body.key}.*\s+(?=isDelete:false)
;db.collection.find({'content.str':{$regex:
*\\b${searchTerm}\\b.*
,$options:'i',}}})@Aks在提供的答案中是否有您认为无法解决您的问题的内容?如果是,请对答案进行评论,以澄清哪些问题需要解决,哪些问题尚未解决。