我有一个这样的集合:
{
"_id" : ObjectId("5a7c49b02d2bbb28a4b2e6a2"),
"phone" : "Pinheiro",
"email" : "Pinheiro",
"variableParameters" : {
"loremIpsum" : "Do you see a little Asian child with a blank expression on his face sitting outside on a mechanical helicopter that shakes when you put quarters in it?",
"uf" : "Rio de Janeiro",
"city" : "Rio de Janeiro",
"end" : "RUA JARDIM BOTÂNICO 1060",
"tel" : "5521999999999",
"eml" : "teste@gmail.com",
"nome" : "Usuario de Teste"
}
}
我想查询" variableParameters"对象,但就像名称所说,这个属性是可变的。因此,在某些情况下,它会有" uf",但在其他情况下会赢得。
我实际上正在执行的查询只匹配mongoose模式中的常量字段:
{ 'phone': { $regex: filter, $options: 'i' } }
有什么方法可以查询" variableParameters"不知道他的孩子的财产?
答案 0 :(得分:1)
如果您不确定密钥(因为它们是可变的),请尝试使用$text搜索
要使用文字搜索,我们需要为variableParameters
索引。
也可以执行区分大小写的文本搜索,但它会影响性能。
有关文字搜索的更多信息,请阅读https://docs.mongodb.com/manual/reference/operator/query/text/
答案 1 :(得分:1)
[解决]
感谢@Clement Amarnath提供帮助。
解决方案是这样的:
_Events.find({ $text: { $search: 'searchText' } }, (err, events) => {
if (err) return Exceptions.HandleApiException(err, res);
res.send(events);
});
$ text参数可以具有以下属性:
{
$text: {
$search: <string>,
$language: <string>,
$caseSensitive: <boolean>,
$diacriticSensitive: <boolean>
}
}
$ search MongoDB解析并用于查询文本索引的一串术语。除非指定为短语,否则MongoDB会对这些术语执行逻辑OR搜索。有关该字段的更多信息,请参阅行为。
$ language 可选。确定搜索停用词列表的语言以及词干分析器和标记生成器的规则。如果未指定,则搜索使用索引的默认语言。有关支持的语言,请参阅文本搜索语言。
如果指定的语言值为&#34; none&#34;,则文本搜索使用简单的标记化,没有停用词列表且没有词干。
$ caseSensitive 可选。一个布尔标志,用于启用或禁用区分大小写的搜索。默认为false;即搜索遵循文本索引的不区分大小写。
$ diacriticSensitive 可选。一个布尔标志,用于启用或禁用对版本3文本索引的变音符敏感搜索。默认为false;即搜索推迟文本索引的变音符号不敏感。
有关详细信息,请参阅MongoDB Documentation。
答案 2 :(得分:0)
您可以使用$ where来构建自己的匹配函数。 全文匹配的示例是:
db.col.find({$where: function(){
return Object.values(this.variableParameters).includes("Rio de Janeiro")
}})