【问题标题】:MongoDB how to find documents by searching a Mixed Schema field?MongoDB如何通过搜索混合模式字段来查找文档?
【发布时间】:2017-03-01 19:57:27
【问题描述】:

我有一个像“美国”这样的搜索文本。我有以下 mongo 文档:

[
 {
  "name": "Car Loan",
  "details": [
   {
       "Bank": "America First",
       "Location": "USA"
   }
 }
]

我使用 Mongoose,我可以使用这个找到像“名称”这样的单一模式:

.find({"name":{ "$regex": req.query.searchText, "$options": "i" } })

是否有类似的方法可以在混合架构中搜索文本,例如“详细信息”?

【问题讨论】:

    标签: mongodb mongoose mongodb-query


    【解决方案1】:

    您可以使用$or 指定所有字段:

    db.text.find({
        $or: [
            { "details.Bank": { "$regex": "America", "$options": "i" } },
            { "details.Location": { "$regex": "America", "$options": "i" } }
        ]
    })
    

    或者您可以使用带有内置不区分大小写功能的text search 功能,您必须在您的数组字段项上创建text indexes:

    db.text.createIndex({
        "details.Bank": "text",
        "details.Location": "text"
    })
    

    并使用$text $search 查找:

    db.text.find({
        $text: {
            $search: "usa"
        }
    })
    

    【讨论】:

    • 谢谢,我对创建索引的第二种解决方案进行了修改,它解决了我的查询。
    • 我有另一个与此相关的问题,我不知道您是否可以帮助我。上面的“createIndex”函数确实为我提供了“America First”或“USA”等值的搜​​索文本结果。如果我还想在我的索引中包含诸如“银行”和“位置”之类的键,然后使用它来查找文档怎么办。有可能吗?
    • 您的意思是您只想按银行或仅按位置搜索(在details 内)?
    • 不,我有详细的各种不同键的文档。所以,我想如果我有“银行”作为我的搜索文本,它应该与我写的上面的文件匹配。
    • 恐怕你必须用文本索引分别定义所有键,我认为多键不适用于text索引,当text用于聚合时,它必须是第一个管道阶段。所以如果你想使用text 索引你在定义你的模型时必须小心
    猜你喜欢
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 2012-01-23
    • 2012-03-18
    • 2019-07-11
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    相关资源
    最近更新 更多