如何将用户输入的日期与mongodb的ISODate对象进行比较。

问题描述 投票:0回答:1

我是MongoDB的新手,有一点卡住了,以下是解释。

我得到一个格式为dd-mm-yyy的日期,我想根据我得到的特定日期找到所有的数据,但在mongo这边,我有一个字段createAt,其中包含ISODate格式的值。但是在mongo这边,我有一个字段createdAt,其中包含ISODate格式的值。当比较这两个字段时,我没有得到任何数据。

mySchema.find({createdAt: {"$eq": date}}).exec();

在数据库中,createdAt的值是ISODate("2020-05-05T14:49:37.210Z"),而我们得到的日期是05-05-2020。

请大家帮我理解一下我哪里做错了。

node.js mongodb mongoose nosql isodate
1个回答
1
投票

你可以将ISO日期转换为任何字符串格式,你想在... 汇聚管道dateToString 函数,然后进行比较。

下面是如何创建一个模式,然后使用它的代码的例子。

// UserModal.js

const mongoose = require("mongoose");
const Schema = mongoose.Schema;


var UserSchema = new Schema({
    first_name: {
        type: String,
        required: true
    },

    last_name: {
        type: String,
        required: true
    },
    ......
}, { timestamps: true });


//make this available to our users in Node applications
module.exports.User = mongoose.model('User', UserSchema);

然后在控制器中

const User = require("UserModal").User;

User.aggregate([
  {
    $addFields: {
      "dateString": { $dateToString: { format: "%Y-%m-%d", date: "$createdAt" } }
    }
  },
  {
    $match: {
      dateString: {
        $eq: "2020-05-05"
      }
    }
  }
]).exec((err, records) => {
  if (err) throw err;
  console.log(records);
})
© www.soinside.com 2019 - 2024. All rights reserved.