$ gte и $ lte в mongoose с несколькими условиями

#javascript #node.js #mongodb #mongoose

#javascript #node.js #mongodb #mongoose

Вопрос:

Я использую $gte и $lte неправильно с другим условием? Я получил пустой массив, но когда я это делаю, user_email:req.bodu.user_email я могу получить все данные.

 function firstDayOfMonth() {
  var d = new Date(Date.apply(null, arguments));
  d.setDate(1);
  return d.toISOString();
}

function tomorrowDate() {
  var d = new Date();
  d.setDate(d.getDate()   1)
  return d.toISOString();
}

Users.find({
    "user_email": req.body.user_email,
    "createdAt": {
      "$gte": firstDayOfMonth(),
      "$lte": tomorrowDate()
    }
  },
  function(err, response) {
    if (!err) {
      console.log(response)
      res.json(response);
    }
  });
  

Комментарии:

1. какова ваша firstDayOfMonth ценность, поскольку ваше Date.now() значение — это временная метка, а не формат даты?

2. @abdul, toISOString?

3. Это зависит от вас, укажите одинаковый формат в обоих условиях, и он будет работать

4. Можете ли вы показать результат ваших обеих функций?

5. 2016-10-01T06:28:37.000Z 2016-10-10T06:28:37.146Z

Ответ №1:

Это должно работать

Я только что протестировал эти документы

 /* 1 */
{
    "_id" : ObjectId("57f9cc3dc4ac279a7c539d0f"),
    "TechActivityId" : 0,
    "LicenseId" : 0,
    "created" : "2016-01-01T00:00:00.000Z",
    "StateofActivity" : "State of Activity",
    "TechGId" : "123121134"
}

/* 2 */
{
    "_id" : ObjectId("57f9e674c4ac279a7c539d10"),
    "TechActivityId" : 0,
    "LicenseId" : 0,
    "created" : "2016-10-10T06:28:37.146Z",
    "StateofActivity" : "State of Activity",
    "TechGId" : "1231234"
}

db.getCollection('hola').find({"created":{"$gte":"2016-01-01T00:00:00.000Z","$lte":"2016-10-10T06:28:37.146Z"}})
  

И я получаю оба документа

Комментарии:

1. У меня опечатка, хахаха

2. просто хотел указать, что если вы хотите получить дату в диапазоне двух дат, вы можете использовать $ gte и $ lt.