javascript 如何在mongodb中过滤年和月之间的数据?

zsohkypk  于 2023-01-04  发布在  Java
关注(0)|答案(2)|浏览(98)

我想在MongoDB中按年份过滤数据。如果我传递了2022年,那么只显示2022年的数据,而当我传递了2023年,则只显示2023年的数据。我不知道如何过滤。我使用了$gte$lte标签,但它返回空。还让我知道我将按特定年份和月份过滤谁。假设是2023年和11月。数据-

{
    _id: new ObjectId("63ac23187dc7d"),
    details: 'hii there i am feeling great today',
    status: '1',
    createdAt: 2021-11-28T11:06:00.736Z
  },
  {
    _id: new ObjectId("63ac23b357dc96"),
    details: 'hi i am feeling good today',
    status: '1',
    createdAt: 2022-12-28T11:08:40.400Z,
  },
  {
    _id: new ObjectId("63b2b2afa0d8e"),
    details: 'Hello!! This is Ankit and feeling good',
    status: '1',
    createdAt: 2022-11-14T10:31:36.098Z
  },
  {
    _id: new ObjectId("63b2b2sswa0d91"),
    details: 'Felling bad a bit',
    status: '1',
    createdAt: 2023-01-02T10:32:27.149Z
  },
  {
    _id: new ObjectId("63b2b2a0d94"),
    details: 'Hmm, its ok ok',
    status: '1',
    createdAt: 2023-01-02T10:33:19.386Z
  }
ldioqlga

ldioqlga1#

如果您正在寻找一种通用的方法来筛选不一定连续的特定年份和月份,一个选项是:

db.collection.find({
  $expr: {
    $and: [
      {$eq: [{$year: "$createdAt"}, 2022]},
      {$eq: [{$month: "$createdAt"}, 11]}
    ]
  }
})

了解它在playground example上的工作原理

6pp0gazn

6pp0gazn2#

假设createdaAt是您要筛选的数据,并且它是一个真实的日期,那么对于一个年份,您可以编写如下查询:

db.collection.find({
 createdAt: { $gte: new Date("2022-01-01"), $lt: new Date("2023-01-01") }
})

对于一个月,它是:

db.collection.find({
 createdAt: { $gte: new Date("2022-11-01"), $lt: new Date("2022-12-01") }
})

相关问题