Javascript $regex在mongoose中如何使用空值

Javascript $regex在mongoose中如何使用空值,javascript,regex,mongodb,mongoose,Javascript,Regex,Mongodb,Mongoose,我在mongoose中使用了$regex,但是对它的行为有点困惑 这是我的数据,我有一个文档,它有一个属性“owner”,如下所示 {“所有者”:“lorem ipsum”} 现在,当我在MongoDB compass中使用{owner:{$regex:,$options:{I}}搜索时,它返回该对象,而当我使用{owner:}搜索时,它不返回任何内容 所以,有人能解释一下为什么这种行为是这样的吗?虽然我没有一个空字符串作为所有者,但在执行$regex时,它会返回该文档 甚至我也尝试将lore

我在mongoose中使用了
$regex
,但是对它的行为有点困惑

这是我的数据,我有一个文档,它有一个属性“owner”,如下所示

{“所有者”:“lorem ipsum”}
现在,当我在MongoDB compass中使用
{owner:{$regex:,$options:{I}}
搜索时,它返回该对象,而当我使用
{owner:}
搜索时,它不返回任何内容

所以,有人能解释一下为什么这种行为是这样的吗?虽然我没有一个空字符串作为所有者,但在执行
$regex
时,它会返回该文档


甚至我也尝试将lorem和“epsum”之间的空格作为“loremepsum”删除,但它有相同的行为。它是否应该返回与
{owner:“}

我无论如何都不是猫鼬专家,但听起来它的行为是正确的

基本上,对
进行regexing会生成一个编译后的regex,看起来像
/
,大致翻译为“什么都找不到”。这种“无”存在于某些不存在的地方,因此在
lorem
l
o
等字符之间存在“无”

使用以下代码段可以最好地将其可视化:

echo preg_replace( '//', '8', 'lorem ipsum' );
其结果是:

8l8o8r8e8m8 8i8p8s8u8m8

所以猫鼬会这样做:

var_dump( preg_match( '//', 'lorem ipsum' ) );
结果是成功地找到了“什么都没有”


相反,
{owner:“}
将查找缺少所有者数据的情况

{owner: {$regex: ""}}
这意味着什么也找不到,在你的字符串中,字母之间没有任何东西

而这

{owner: ""}
意味着找到与此相等的所有者“”


我已经在Robo 3T中测试了您的查询,得到了相同的结果,因此我认为这与mongo使用的正则表达式版本有关,即(PCRE-8.42)

我的答案是否正确?@MonkeyZeus当然,您和Sarkar提出了相同的建议。另外,你用一个例子来描述,所以即使我也不确定答案,但这似乎是合乎逻辑的。对你们两个来说都是一个好的工作,蒙基宙斯就是一个很好的例子,当然这是有道理的。