【初心者向け】Node.js、Mongooseでサクッとデータを取得!日付順ソートもマスターしよう!
Node.js、Mongoose で日付順にソートする方法
例
以下のコードは、createdAt
フィールドで昇順にソートされた posts
コレクションのすべてのドキュメントを取得します。
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test');
const Post = mongoose.model('Post', {
title: String,
content: String,
createdAt: Date
});
Post.find({}).sort('createdAt').exec((err, posts) => {
if (err) {
console.error(err);
return;
}
console.log(posts);
});
解説
mongoose.sort()
メソッドを使って、ソート条件を指定します。- 引数として、ソートするフィールド名と、昇順(
1
)または降順(-1
)を指定します。 - 複数のフィールドでソートする場合は、オブジェクトを使用して指定できます。
Post.find({}).sort({ createdAt: 1, title: 1 }).exec((err, posts) => {
// ...
});
mongoose.find()
メソッドは、クエリ条件を指定してドキュメントを検索できます。mongoose.exec()
メソッドは、クエリを実行して結果を取得します。- エラー処理を忘れずに実装してください。
app.js
- メインスクリプトmodels/post.js
-Post
スキーマ定義
models/post.js
このファイルは、Post
スキーマを定義します。
const mongoose = require('mongoose');
const postSchema = new mongoose.Schema({
title: String,
content: String,
createdAt: Date
});
module.exports = mongoose.model('Post', postSchema);
app.js
このファイルは、MongoDB に接続し、ドキュメントをソートして取得します。
const mongoose = require('mongoose');
const Post = require('./models/post');
mongoose.connect('mongodb://localhost:27017/test');
// サンプルデータ作成
const post1 = new Post({
title: 'My First Post',
content: 'This is my first post.',
createdAt: new Date('2024-05-17T00:00:00Z')
});
const post2 = new Post({
title: 'My Second Post',
content: 'This is my second post.',
createdAt: new Date('2024-05-18T00:00:00Z')
});
post1.save((err) => {
if (err) {
console.error(err);
return;
}
post2.save((err) => {
if (err) {
console.error(err);
return;
}
// ドキュメントを日付順にソートして取得
Post.find({}).sort('createdAt').exec((err, posts) => {
if (err) {
console.error(err);
return;
}
console.log(posts);
});
});
});
実行方法
models/post.js
とapp.js
ファイルを保存します。- ターミナルで以下のコマンドを実行します。
node app.js
出力
[
{ _id: 6282905194e3497169436567, title: 'My First Post', content: 'This is my first post.', createdAt: 2024-05-17T00:00:00.000Z },
{ _id: 6282905294e3497169436568, title: 'My Second Post', content: 'This is my second post.', createdAt: 2024-05-18T00:00:00.000Z }
]
説明
app.js
ファイルは、MongoDB に接続し、Post
コレクションに 2 つのドキュメントを作成します。- ドキュメントは
createdAt
フィールドで昇順にソートされます。 - ソートされたドキュメントはコンソールに出力されます。
- 実際のアプリケーションでは、より複雑なクエリやソート条件を使用する必要がある場合があります。
Post.find({}).sort({ createdAt: 1 }).exec((err, posts) => {
// ...
});
aggregate() メソッド
mongoose.aggregate()
メソッドを使って、より複雑なクエリとソートを実行できます。
Post.aggregate([
{ $sort: { createdAt: 1, title: 1 } }
]).exec((err, posts) => {
// ...
});
$match オペレータ
$match
オペレータを使って、条件に一致するドキュメントのみを検索できます。
以下のコードは、createdAt
フィールドが特定の日付以降のドキュメントを取得します。
const startDate = new Date('2024-05-18T00:00:00Z');
Post.find({ createdAt: { $gte: startDate } }).sort('createdAt').exec((err, posts) => {
// ...
});
$project オペレータ
$project
オペレータを使って、取得するフィールドを指定できます。
以下のコードは、title
フィールドと createdAt
フィールドのみを含むドキュメントを取得します。
Post.find({}).sort('createdAt').project({ title: 1, createdAt: 1 }).exec((err, posts) => {
// ...
});
それぞれの方法の利点と欠点
mongoose.sort()
メソッド: シンプルで使いやすい。$sort
オペレータ:mongoose.find()
メソッドと一緒に使用できる。aggregate()
メソッド: より複雑なクエリとソートを実行できる。
node.js mongodb mongoose