mongoose 筛选数据 根据 只比较 年月日 是否相等
在开发中,经常会遇到根据日期进行数据筛选的需求,而有时候我们只需要比较日期的年月日部分是否相等。在使用 mongoose 进行数据库操作时,我们可以利用 MongoDB 的聚合查询来实现这一功能。
步骤1:创建 Mongoose 连接
首先,我们需要创建一个 Mongoose 连接并定义一个 Schema,用于表示我们的数据模型。在本文中,我们以一个包含日期字段的示例数据模型为例:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const dataSchema = new Schema({
name: String,
date: Date
});
const DataModel = mongoose.model('Data', dataSchema);
mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true });
步骤2:使用聚合查询筛选数据
接下来,我们将使用 Mongoose 的 aggregate 方法来筛选数据并只比较日期的年月日部分是否相等。我们可以使用 MongoDB 中的 $dateToString 操作符将日期字段转换成指定格式的字符串,然后将其与目标日期做比较。
const targetDate = new Date('2022-04-15');
const dateStr = {
dateToString: {
format: "%Y-%m-%d",
date: "date"
}
};
DataModel.aggregate([
{
addFields: {
"dateStr": dateStr
}
},
{match: {
dateStr: { $eq: targetDate.toISOString().slice(0,10) }
}
}
]).exec((err, result) => {
if (err) {
console.error(err);
} else {
console.log(result);
}
});
在上面的代码中,我们首先定义了一个目标日期 targetDate,并将其转换成字符串格式。然后通过 addFields 操作符创建一个新的 dateStr 字段,用于存储日期字段的字符串格式。最后使用match 操作符将符合条件的数据筛选出来。
示例代码运行结果
假设我们有以下数据:
const testData = [
{ name: "Alice", date: new Date("2022-04-15") },
{ name: "Bob", date: new Date("2022-05-25") },
{ name: "Cindy", date: new Date("2021-04-15") }
];
testData.forEach(data => {
DataModel.create(data, (err, result) => {
if (err) {
console.error(err);
} else {
console.log("Data created:", result);
}
});
});
当我们运行上面的示例代码后,然后再运行聚合查询的代码,将会输出如下结果:
[ { _id: 6209bc009b72c87ed4fae4d5,
name: 'Alice',
date: 2022-04-15T00:00:00.000Z,
__v: 0,
dateStr: '2022-04-15' } ]
可以看到,只有日期部分为 2022-04-15 的数据被正确筛选出来,符合我们的预期。通过这种方式,我们可以轻松地根据日期比较筛选数据,而无需考虑具体的时间部分。
小结
本文介绍了如何使用 Mongoose 进行数据筛选,只比较日期的年月日部分是否相等。通过使用 MongoDB 的聚合查询和一些操作符,我们可以轻松地实现这一功能,让开发变得更加简单和高效。