猫鼬用一个搜索参数查找具有组合字段的文档

Posted

技术标签:

【中文标题】猫鼬用一个搜索参数查找具有组合字段的文档【英文标题】:mongoose find document with combined fields with one search parameter 【发布时间】:2019-02-06 19:44:59 【问题描述】:

我在 Mongoose 中使用 Nodejs 和 Mongodb。我的模型包含以下属性:

first_name
last_name
status

我需要使用 mongoose 查找功能来搜索具有这 3 个字段的用户。我有 2 个参数:

full_name: Craig de Zia
status: alive

例如,我有一个叫 Craig de Zia 的名字。我不知道名字的哪些部分是名字或姓氏,所以我想搜索全名。我想用“$and”逻辑连接全名和状态。条件结构如下:

'$and': [ 
     'full_name': 'Craig de Zia' ,
     status: 'alive' ,
] 

问题是数据库中没有full_name字段。我们需要结合 first_name 字段和 last_name 字段。我该怎么做?

【问题讨论】:

【参考方案1】:

根据条件管理first_namelast_name

db.collection.find(
  $and: [
    
      $expr:  $eq: ['Craig de Zia',  $concat: ["$first_name", "$last_name"] ] 
    ,
     'status': 'alive' 
  ]
)

请在此处将 first_name 和 last_name 管理为 $concat 为 "first_namelast_name" 并且如果您想搜索 first_namelast_name 之间有空格,然后使用

$concat: ["$first_name", " ", "$last_name"]

【讨论】:

谢谢!有用!我可以问另一个关于正则表达式的问题吗?我还可以添加这个正则表达式: $regex: new RegExp("\\b" + full_name, "i") 使其不必完全匹配吗? $or: [ first_name: $regex: /\bSearchingKeyWord/, $options: 'ig' , last_name: $regex: /\bSearchingKeyWord/, $options: 'ig ' ] 你可以这样做,但你找不到所需的结果。

以上是关于猫鼬用一个搜索参数查找具有组合字段的文档的主要内容,如果未能解决你的问题,请参考以下文章

具有多个和可选字段的猫鼬查找

如何通过填充字段在猫鼬中查找文档?

如何通过填充字段在猫鼬中查找文档?

具有动态关键字段的 Kettle 组合查找步骤(维度字段/流中的字段)

如何使用猫鼬防止重复文件mongodb

Cayenne - 搜索依赖组合