gpt4 book ai didi

node.js - 如何使用 MongoDB 按名字和姓氏搜索用户?

转载 作者:IT老高 更新时间:2023-10-28 13:35:55 25 4
gpt4 key购买 nike

我有一个基本的用户集合,其中包含他们的 firstNamelastName 和一些其他详细信息。

我将如何简单地通过两个名称的组合或部分搜索来搜索用户?

例如,对于一个集合:

{
firstName: Bob,
lastName: Jerry
}, {
firstName: Clark,
lastName: Mcbobby
}

如果搜索词是 bob,则将返回两个用户,因为第一个文档 firstName 是 bob,最后一个用户 lastName 包含鲍勃。如果 bob j 是搜索词,则只返回第一个文档,因为如果两个名称都合并,它等于匹配搜索词的 Bob Jerry

我尝试创建一个基本的 aggregate 来连接名称,然后进行匹配,尽管 Mongoose 一直向我抛出错误:Arguments must be aggregate pipeline operator

这是我当前的代码:

User.aggregate({
$project: { "name" : { $concat : [ "$firstName", " ", "$lastName" ] } },
$match: {"name": {$regex: "/bob j/i"}}
}).exec(function(err, results) {
...
});

最佳答案

我发现您的代码中有几个错误导致了不希望的结果。

  1. 聚合管道接受聚合框架操作数组。在您的情况下,您缺少 [] 运算符。应该是这样的

    User.aggregate([{$project...},{$match...}])

  2. 在 $match 阶段,您使用的是正则表达式,如果您使用的是 /../ 风格的正则表达式,则不需要将其包裹在字符串引号中。应该是 /bob j/i

这是完成的例子:

User.aggregate([
{$project: { "name" : { $concat : [ "$firstName", " ", "$lastName" ] } }},
{$match: {"name": {$regex: /bob j/i}}}
]).exec(function(err, result){
console.log(result);
});

您应该会在屏幕上看到 [ { _id: 574c3e20be214bd4078a9149, name: 'Bob Jerry' } ]

关于node.js - 如何使用 MongoDB 按名字和姓氏搜索用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37525675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com