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

标签 mongodb mongoose mongodb-query

我有一个搜索文本,例如“美国”。我有以下 mongo 文档:

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

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

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

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

最佳答案

您可以使用$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"
    }
})

关于MongoDB如何通过搜索混合模式字段来查找文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42521376/

相关文章:

node.js - Node Mongo db.runCommand 不是函数

node.js - 你能从 mongo 访问 mongoose 创建的数据库吗?

mongodb - 返回满足子查询结果集的文档

javascript - MongoDB javascript 查询

node.js - 查询名字、姓氏作为全名

node.js - Mongoose 可选嵌套属性 - 检查空/未定义?

mongoDB:如何反转 $unwind

javascript - 用随机时间更新集合中的每条记录?

javascript - 使用 Mongoose 查询仅获取子文档

node.js - 在node.js + sailsjs中,我们从哪里可以决定使用 "sails-mongoose"包的集合名称?