<code>const searchUser = asyncHandler(
async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
const { name = "" } = req.query;
const users = await User.aggregate(
[
{
$match: {
_id: { $ne: new Types.ObjectId(req.userId) },
},
},
{
$match: {
name: { $regex: name, $options: "i" },
},
},
{
$sort: { name: 1 },
},
{
$project: {
_id: 1,
name: 1,
avatar: 1,
},
},
],
{ collation: { locale: "en", strength: 1, caseLevel: true, caseFirst: "lower" } }
);
return res.status(200).json({ success: true, status: 200, users });
}
);
</code>
<code>const searchUser = asyncHandler(
async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
const { name = "" } = req.query;
const users = await User.aggregate(
[
{
$match: {
_id: { $ne: new Types.ObjectId(req.userId) },
},
},
{
$match: {
name: { $regex: name, $options: "i" },
},
},
{
$sort: { name: 1 },
},
{
$project: {
_id: 1,
name: 1,
avatar: 1,
},
},
],
{ collation: { locale: "en", strength: 1, caseLevel: true, caseFirst: "lower" } }
);
return res.status(200).json({ success: true, status: 200, users });
}
);
</code>
const searchUser = asyncHandler(
async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
const { name = "" } = req.query;
const users = await User.aggregate(
[
{
$match: {
_id: { $ne: new Types.ObjectId(req.userId) },
},
},
{
$match: {
name: { $regex: name, $options: "i" },
},
},
{
$sort: { name: 1 },
},
{
$project: {
_id: 1,
name: 1,
avatar: 1,
},
},
],
{ collation: { locale: "en", strength: 1, caseLevel: true, caseFirst: "lower" } }
);
return res.status(200).json({ success: true, status: 200, users });
}
);
I am building search user end point and in that i want all the users except the current user and i want results in sorted order according to user’s name. I want that lowercase come first, then uppercase.
For example:
“john Doe”,
“John Doe”
“Maxtern”
How can i do this using collation?