MongoDB如何通过搜索混合模式字段来查找文档?

MongoDB如何通过搜索混合模式字段来查找文档?,mongodb,mongoose,mongodb-query,Mongodb,Mongoose,Mongodb Query,我有一个像美国一样的搜索文本。我有以下mongo文件: [ { "name": "Car Loan", "details": [ { "Bank": "America First", "Location": "USA" } } ] 我使用Mongoose,我可以通过以下方式找到一个类似于模式的名称: .find{name:{$regex:req.query.searchText,$options:i} 是否有类似的方法在混合模式(如详细信息)

我有一个像美国一样的搜索文本。我有以下mongo文件:

[
 {
  "name": "Car Loan",
  "details": [
   {
       "Bank": "America First",
       "Location": "USA"
   }
 }
]
我使用Mongoose,我可以通过以下方式找到一个类似于模式的名称:

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

是否有类似的方法在混合模式(如详细信息)中搜索文本?

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

db.text.find({
    $or: [
        { "details.Bank": { "$regex": "America", "$options": "i" } },
        { "details.Location": { "$regex": "America", "$options": "i" } }
    ]
})
或者,您可以将该功能与内置的不区分大小写功能一起使用,您必须在阵列字段项上创建:

db.text.createIndex({
    "details.Bank": "text",
    "details.Location": "text"
})
并通过以下方式查找:


谢谢,我对创建索引的第二个解决方案进行了修改,它解决了我的查询。我还有一个与此相关的问题,我不知道您是否可以帮助我。上面的“createIndex”函数只为“America First”或“USA”等值提供搜索文本的结果。如果我还想在索引中包含诸如“Bank”和“Location”之类的键,然后使用它们来查找文档呢。有可能吗?你的意思是你只想按银行或只按位置搜索内部详细信息吗?没有,我有各种不同密钥的文档详细信息。所以,我想如果我有银行作为我的搜索文本,它应该匹配我写的上述文档。我担心你将不得不用文本索引单独定义所有键,我认为多键不适用于文本索引,当文本用于聚合时,它必须是第一个管道阶段。因此,如果您想使用文本索引,那么在定义模型时必须小心
db.text.find({
    $text: {
        $search: "usa"
    }
})