我想找到所有包含" school "在任何子文档字段中,例如,如果我们有两个文档:
{
name: "aa",
schools: [
{
name: "high school",
description: "aaaa"
},
{
name: "a1",
description: "blabla bla school"
},
...
],
},
{
name: "bb",
schools: [
{
name: "bbb",
description: "First school of ..."
},
{
name: "b school",
description: "bbb bb b",
...
}
],
},
这些文件应与第一所或/或第二所学校的名称和/或描述相符。
我尝试了此查询但没有成功:
{
schools: /.*school.*/
}
这也是通过列出字段:
{
school: [
{ name: /.*school.*/ },
{ description: /.*school.*/ },
...
]
}
他们有办法执行此操作吗?
答案 0 :(得分:2)
最简单的方法是创建全文索引。
您可以按照https://docs.mongodb.org/manual/core/index-text/
上的文档执行此操作然后可以使用$ text运算符查询索引:https://docs.mongodb.org/manual/reference/operator/query/text/
在所有字段上创建索引
db.schools.createIndex( { "$**": "text" } )
搜索强>
db.schools.find({
$text:
{
$search: "school",
$language: "en",
$caseSensitive: false,
$diacriticSensitive: false
}
})
答案 1 :(得分:1)
如果您需要真正的通配符查询,那么@ a-h关于文本索引的答案是可行的方法。但您也可以使用$or
查询来检查匹配的多个字段:
db.schools.find({
$or: [
{ 'schools.name': /school/ },
{ 'schools.description': /school/ },
...
]
})