π Exercises
Time to get some practice with the concepts you've learned! Try to answer the following questions to the best of your ability. Feel free to reference the slides and notes you've taken during the lesson.
No cheating! Try to look at the answer only after you give it a try.
Add fuzzy searchβ
Try adding fuzzy search to your application so it can find the correct books, even if the user makes a typo.
Remember the fuzzy parameter of the text
operator? This is where you'd use it.
Answer
public async searchBooks(query: string): Promise<Book[]> {
const aggregationPipeline = [
{
$search: {
index: 'fulltextsearch',
text: {
query,
path: ['title', 'authors.name', 'genres'],
fuzzy: {
maxEdits: 2
}
}
}
}
];
const books = await collections?.books?.aggregate(aggregationPipeline).toArray() as Book[];
return books;
}
Promote the books of the monthβ
The marketing team has decided that they want to promote the books of the month. They want to show these books first in the search results. How would you do this?
You'll need to use the compound
operator with multiple operators here. There is a bookOfTheMonth
boolean field on some of the books that you could use.
Answer
public async searchBooks(query: string): Promise<Book[]> {
const aggregationPipeline = [
{
$search: {
"index": "fulltextsearch",
"compound": {
"must": [
{
"text": {
query,
"path": ["title", "authors.name", "genres"],
fuzzy: {
maxEdits: 2
}
}
}
],
"should": [
{
"equals": {
"value": true,
"path": "bookOfTheMonth",
"score": {
"boost": { value: 10 }
}
}
}
]
}
}
}
];
const books = await collections?.books?.aggregate(aggregationPipeline).toArray() as Book[];
return books;
}