gpt4 book ai didi

javascript - Mongoose:查询年份列表

转载 作者:行者123 更新时间:2023-12-03 01:18:37 25 4
gpt4 key购买 nike

我定义了一个请求架构:

var RequestSchema = new Schema({
date: {
type: Date,
required: true,
default: Date.now
},
status: {
type: String,
enum: ['Open', 'Closed'],
required: true,
default: 'Open'
}
});

考虑以下文档:

{ status: 'Closed',
date: 2018-08-15T22:43:55.073Z,
_id: 5b61b3b8de9c7252efb77238,
__v: 0 }
{ status: 'Open',
date: 2019-08-15T22:43:55.073Z,
_id: 5b61b3b8de9c7252efb77239,
__v: 0 }

我想要实现的目标很简单,但我似乎无法使其发挥作用。我需要一个包含提出请求的所有年份的列表,例如,如果我们考虑上面显示的文档,我希望得到以下列表:

['2018', '2019']

我是 webdev 世界的新手,所以我能想到的最简单的解决方案如下:

var years = [];

for (var i = 0; i < 100; i++) {
var start = new Date(2018 + i, 1, 1);
var end = new Date(2018 + i, 12, 31);

Request.findOne({ date: { $gte: start, $lt: end } })
.then(function(request) {
if (request) {
years.push(2018 + i);
}
});
}

res.json(years);

很明显,它不起作用,因为变量 years 不会改变,因为 years.push() 是从回调函数执行的。我以为我可以找到解决办法,但到目前为止我还找不到。

如有任何帮助,我们将不胜感激!

最佳答案

在 mongoDB 中为您执行此操作的查询将如下所示:

db.getCollection('<YourCollectionName>').aggregate([
{ $project: { _id: 0, year: { $year: "$date" }}},
{ $group: { "_id": null, years: { $push: "$year" } } }
])

它会给你这样的结果:

{
"_id" : null,
"years" : [2018, 2019]
}

现在你有了年份数组。

在您的查询中,您正在执行findOne,但您需要聚合才能获取按年份类型结果分组。我确信还有其他方法可以通过 MongoDB 查询获取结果,但这应该可以帮助您入门。

所以你需要的就是将其转换为 Mongoose ......应该是以下内容:

const aggregate = Model.aggregate([
{ $project: { _id; 0, year: { $year: "$date" } } },
{ $group: { "_id": null, years: { $push: "$year" } } }
]);

尚未测试,因此请谨慎操作:)

关于javascript - Mongoose:查询年份列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51868067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com