Node.js is a popular runtime platform to create programs that run on it.
It lets us run JavaScript outside the browser.
In this article, we’ll look at how to start using Node.js to create programs.
Collation Priority
If there are collation rules applied on the index and the query, then we can set the priority of the collation rule.
For example, we can write:
const { MongoClient } = require('mongodb');
const connection = "mongodb://localhost:27017";
const client = new MongoClient(connection);
async function run() {
try {
await client.connect();
const db = client.db("test");
await db.dropCollection('test');
await db.createCollection("test");
const testCollection = await db.collection('test');
await testCollection.createIndex(
{ 'name': 1 },
{ 'collation': { 'locale': 'en' } });
await testCollection.dropIndexes();
await testCollection.deleteMany({})
const result = await testCollection.insertMany([
{ "_id": 1, "name": "apples", "qty": 5, "rating": 3 },
{ "_id": 2, "name": "bananas", "qty": 7, "rating": 1 },
{ "_id": 3, "name": "oranges", "qty": 6, "rating": 2 },
{ "_id": 4, "name": "avocados", "qty": 3, "rating": 5 },
]);
console.log(result)
const options = { "collation": { "locale": "en_US", "strength": 2 } };
const cursor = testCollection
.find({}, options)
.sort({ "name": -1 });
cursor.forEach(console.dir);
} finally {
await client.close();
}
}
run().catch(console.dir);
We have an options
object to set the collation
rule with the strength
property.
The strength
property determines the order of the collation rules we apply.
Collation Query
Collation is supported by find and sort queries.
For example, we can write:
const { MongoClient } = require('mongodb');
const connection = "mongodb://localhost:27017";
const client = new MongoClient(connection);
async function run() {
try {
await client.connect();
const db = client.db("test");
await db.dropCollection('test');
await db.createCollection("test");
const testCollection = await db.collection('test');
await testCollection.createIndex(
{ 'name': 1 },
{ 'collation': { 'locale': 'en' } });
await testCollection.dropIndexes();
await testCollection.deleteMany({})
const result = await testCollection.insertMany([
{ "_id": 1, "name": "apples", "qty": 5, "rating": 3 },
{ "_id": 2, "name": "bananas", "qty": 7, "rating": 1 },
{ "_id": 3, "name": "oranges", "qty": 6, "rating": 2 },
{ "_id": 4, "name": "avocados", "qty": 3, "rating": 5 },
]);
console.log(result)
const cursor = testCollection
.find({ name: "name" }, { collation: { locale: "en" } })
.sort({ name: 1 });
cursor.forEach(console.dir);
} finally {
await client.close();
}
}
run().catch(console.dir);
The 2nd argument of find
has an object with the collation
property to set the collation rules.
We can also set the collation rule with the findOneAndUpdate
method:
const { MongoClient } = require('mongodb');
const connection = "mongodb://localhost:27017";
const client = new MongoClient(connection);
async function run() {
try {
await client.connect();
const db = client.db("test");
await db.dropCollection('test');
await db.createCollection("test");
const testCollection = await db.collection('test');
await testCollection.createIndex(
{ 'name': 1 },
{ 'collation': { 'locale': 'en' } });
await testCollection.dropIndexes();
await testCollection.deleteMany({})
const result = await testCollection.insertMany([
{ "_id": 1, "name": "apples", "qty": 5, "rating": 3 },
{ "_id": 2, "name": "bananas", "qty": 7, "rating": 1 },
{ "_id": 3, "name": "oranges", "qty": 6, "rating": 2 },
{ "_id": 4, "name": "avocados", "qty": 3, "rating": 5 },
]);
console.log(result)
testCollection
.findOneAndUpdate(
{ qty: { $lt: 5 } },
{ $set: { rating: 5 } },
{ collation: { locale: "en" } },
)
} finally {
await client.close();
}
}
run().catch(console.dir);
The 3rd argument has the collation
property set to set the collation rule.
Conclusion
The collation rule priority can be set when we make queries. Also, we can set collation rules when we find, sort or update items.