Mongodb Mongo:查找不带点符号的子文档

Mongodb Mongo:查找不带点符号的子文档,mongodb,Mongodb,例如,我们有收集 {field: {subfield: 'name'}} {field: {subfield: 'phone'}} 我能找到不带点符号的文件吗?像这样 db.test.find({field: {subfield: /regex/}}) 或者像这样 db.test.find({field: {$someOperator: {subfield: /regex/}}}) 我只是不想像这样构建点符号 db.test.find({"field.subfield": /regex/}

例如,我们有收集

{field: {subfield: 'name'}}
{field: {subfield: 'phone'}}
我能找到不带点符号的文件吗?像这样

db.test.find({field: {subfield: /regex/}})
或者像这样

db.test.find({field: {$someOperator: {subfield: /regex/}}})
我只是不想像这样构建点符号

db.test.find({"field.subfield": /regex/})
问题在于:

db.test.find({field: {$someOperator: {subfield: /regex/}}})
实际上是MongoDB中的另一种查询方式,它使用对象优性来搜索子文档

所以不,你必须使用点符号,除非你在搜索一个物体与另一个物体完全相等的地方

也就是说,您可以将文档包装在
$elemMatch
中:这样就行了

编辑
考虑到您的收集结构,
$elemMatch
实际上不起作用。

您为什么不想使用点符号?例如,当我在web上提交表单时,我需要构建点符号查询,而不仅仅是使用提交的对象。您不能使用$elemMatch,除非它是一个数组-普通嵌入文档不会像您期望的那样匹配。你真的试过了吗?@GabeRainbow有一个JIRA在默认情况下在某个地方更改了它,但是,对象比较确实有它的用处,这是mongo中的一个缺陷。它需要$eq操作符。例如,类似的大于$gte将提供您的结果以及不需要的结果。db.test.find({field:{$gte:{subfield:“test”}}}),而所需的是db.test.find({field:{$eq:{subfield:“test”}}}})