查询子图,不知道钥匙



我有一个类似的集合:

{
"_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"
    }
}

我想查询"变量参数"对象,但是就像名称所说的那样,此属性是可变的。因此,在某些情况下,它将具有" UF",但在其他情况下不会。

{ 'phone': { $regex: filter, $options: 'i' } }

有什么办法可以在不知道他的孩子属性的情况下查询"变量参数"?

如果您不确定键(因为它们是可变的(,请尝试使用$ text Search

要使用文本搜索,我们需要索引variableParameters

案例敏感的文本搜索也可以执行,但会影响性能。

请阅读https://docs.mongodb.com/manual/reference/poerator/query/text/有关文本搜索的更多信息

[已解决]

感谢@Cllement amarnath的帮助。

解决方案是这样的:

_Events.find({ $text: { $search: 'searchText' } }, (err, events) => {
    if (err) return Exceptions.HandleApiException(err, res);
    res.send(events);
});

$文本参数可以具有此属性:

{
  $text: {
      $search: <string>,
      $language: <string>,
      $caseSensitive: <boolean>,
      $diacriticSensitive: <boolean>
  }
}

$ search 一串术语,该术语可以解析并用于查询文本索引。除非指定为短语,否则MongoDB对术语进行逻辑或搜索。有关现场的更多信息,请参见行为。

$ language 可选。确定搜索的停止单词列表的语言以及词干和令牌器的规则。如果未指定,则搜索使用索引的默认语言。有关支持的语言,请参阅文本搜索语言。

如果您指定了"无"的语言值,则文本搜索使用简单的令牌化,而没有停止单词列表,也没有stegming。

$ caseSimentive 可选。布尔标志以启用或禁用案例敏感搜索。默认为false;即,搜索范围对文本索引的不敏感性。

$ ducriticsentive 可选。一个布尔标志,可针对版本3文本索引启用或禁用变性敏感搜索。默认为false;即,搜索范围为文本索引的大气不敏感。

有关更多信息,请参见MongoDB文档。

您可以使用$在哪里构建自己的匹配功能。全文匹配的一个例子是:

db.col.find({$where: function(){
  return Object.values(this.variableParameters).includes("Rio de Janeiro")
}})

最新更新