Как сравнить дату ввода пользователя с объектом mongodb ISODate - PullRequest
0 голосов
/ 08 мая 2020

Я новичок в MongoDB, и я застрял в одном месте, следующее объяснение.

Я получаю дату в формате дд-мм-гггг, и я хочу найти все данные в соответствии с конкретным дата, которую я получаю. Но на стороне mon go у меня есть поле createdAt, которое содержит значения в формате ISODate. Сравнивая эти два, я не получаю никаких данных.

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

Здесь значение createdAt в базе данных - ISODate («2020-05-05T14: 49: 37.210Z»), и мы получаем дату как 05 -05-2020

Пожалуйста, помогите мне понять, где я делаю не так.

1 Ответ

2 голосов
/ 08 мая 2020

Вы можете преобразовать дату 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);
})
...