例如我们有集合
{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/})
答案 0 :(得分:5)
问题在于:
db.test.find({field: {$someOperator: {subfield: /regex/}}})
实际上是在MongoDB中查询的另一种方法,它使用对象euqality来搜索子文档。
所以不,你必须使用点表示法,除非你在寻找一个物体与另一个物体完全相等的位置。
话虽如此,你可以将文件包装在$elemMatch
:http://docs.mongodb.org/manual/reference/operator/elemMatch/中,这样可行吗
考虑到您的集合结构$elemMatch
实际上不起作用。
答案 1 :(得分:0)
是的,这可以使用聚合管道实现。
首先,使用 $replaceRoot 将根文档移动到子文档。另外,将根文档($$ROOT)保留在一个字段中,以便稍后输出。
$replaceRoot: {
newRoot: {
$mergeObjects: [{
_root: "$$ROOT"
},
"$field"
]
}
}
接下来,使用 $match 对子文档执行查询。
$match: {
subfield: /regex/
}
最后,使用 $replaceRoot 将根设置回整个文档。
$replaceRoot: {
newRoot: "$_root"
}
我不认为这会非常高效,但它有效。