Найти по дате без функции - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть коллекция mongodb со свойством date.Мне нужно найти некоторые объекты, у которых дата больше, чем буквенная строка даты .Я использую нативный драйвер для node.js.И я получаю дату в виде строки.Когда я пытаюсь это сделать, не работает:

db.myCollection.find({ 
        'dateField': { $gte : "1974-11-18T02:00:00.000Z"  }
}).count()

Это тоже не работает:

db.myCollection.find({ 
        'dateField': { $gte : {$date: '1974-11-18T02:00:00.000Z'}  }
}).count()

Но это работает:

db.myCollection.find({ 
        'dateField: { $gte : ISODate("1974-11-18T02:00:00.000Z")  }
}).count()  

Как можноЯ запрашиваю mongodb по дате без использования функций Date () или ISODate ()?

Редактировать:

Я не могу использовать функцию, потому что в моем приложении nodejs у меня естьэтот объект:

let conditions = {}
conditions['dateField'] = "1974-11-18T02:00:00.000Z"

let rows = await db.collection('myCollection').aggregate([
    {$match: conditions},
    {$count: "total"}
]).toArray()

Поэтому я не могу передать "функцию" для объекта условий в $ match на mongodb, потому что это не работает:

conditions['dateField'] = new Date("1974-11-18T02:00:00.000Z")

1 Ответ

0 голосов
/ 24 апреля 2019

Я получил его, изменив поле mongodb с типа даты на строку .Но строка должна быть в формате даты ISO-8601 , например "1974-11-18T02: 00: 00.000Z".Теперь я могу сделать запрос к mongodb, используя дату в буквальной строке:

db.myCollection.find({ 
    'dateField': { $gte : "1974-11-18T02:00:00.000Z"  }
}).count()

Я думаю, что это работает, потому что mongodb должен понимать, что строка в формате ISO, а затем десериализовать строку по дате, чтобы сделать сравнение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...