Как искать имя и фамилию пользователей в mongoDB и возвращать полный объект - PullRequest
0 голосов
/ 14 июля 2020

Я хочу найти своих пользователей в БД, используя их имя и фамилию, а затем вернуть его полный объект, но то, что я нашел в другом сообщении, возвращает _id и name, которые объединены firstName и lastName

Это код, который я использую.

results = await StageOne.aggregate([
      { $project: { "name": { $concat: ["$firstName", " ", "$lastName"] } } },
      { $match: { "name": { $regex: searchInput, $options: 'i' } } }
  ]).collation(
      { locale: 'en', strength: 2 }
  ).limit(limit).skip(offset);

И ответ выглядит примерно так:

{ _id: 5f064921a8900b73174f76a1, name: 'John Doe' }

Я хочу, чтобы мне вернули что-то вроде этого

{ _id: 5f08fc3b8f2719096146f767, firstName: 'John', lastName: 'Doe', email: 'johndoe@email.com' ... createdAt: 2020-07-10T23:39:39.310Z, updatedAt: 2020-07-10T23:39:39.310Z, __v: 0 }

Что я могу сделать, запустив его отдельно для firstName или lastName

results = await StageOne.find({ firstName: { $regex: searchInput, $options: 'i' } }).collation(
        { locale: 'en', strength: 2 }
     ).limit(limit).skip(offset); 

1 Ответ

1 голос
/ 14 июля 2020

Я бы посоветовал вам добавить $project в конце вашего конвейера.

{$project: {$firstName:1, $lastName:1, $email:1, $name:1}}

As In

 db.collection.aggregate([
  {
    $project: {
      "name": {
        $concat: [
          "$firstName",
          " ",
          "$lastName"
        ]
      },
      firstName: 1,
      lastName: 1,
      data: 1
    }
  },
  {
    $match: {
      "name": {
        "$regex": "ohn",
        "$options": "i"
      }
    }
  },
  {
    $project: {
      firstName: 1,
      lastName: 1,
      data: 1
    }
  }
])

play

Вам необходимо добавить часть вашего конвейера first project, все поля должны быть спроецированы.

Другой способ для достижения этого.

...