【问题标题】: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 字段。我该怎么做?

【问题讨论】:

    标签: node.js mongodb search mongoose


    【解决方案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 ' } }] 你可以这样做,但你找不到所需的结果。
    猜你喜欢
    • 2021-05-11
    • 2020-07-25
    • 2020-02-17
    • 2017-05-14
    • 2020-08-10
    • 1970-01-01
    • 2020-03-13
    • 2022-01-17
    • 2021-10-17
    相关资源
    最近更新 更多