Как преобразовать строку в дату в MongoDB - PullRequest
0 голосов
/ 14 апреля 2020

Я использую pymon go, чтобы найти все записи сегодня и вчера. Я следовал учебнику по pymon go и не могу сделать эту работу.

Например, у меня есть образец документа, подобный этому

{
   "_id":"1586856578",
   "threads": "hello"
}

Теперь я попытался получить документ на вчера, используя следующий код.

result = collection.find({"_id": {"$lt": yesterday}}) #<= Not working

Итак, я увидел, что где-то mongodb поддерживает строку с использованием toDate, поэтому я тоже попробовал это.

from datetime import datetime, timedelta

yesterday = datetime.now() - timedelta(days=1)

dateConversionStage = {"$addFields": {"convertedDate": {"$toDate": "$_id"}}}

result = collection.find({"dateConversionStage": {"$lt": yesterday}})

Но все равно возвращается пустым. Помогите мне распечатать все документы, которые не старше, чем вчера.

Обновление

convertedLong = {"$addFields": {"convertedLong": {"$toDecimal": "$_id"}}}
convertedDate = {"$addFields": {"convertedDate": {"$toDate": "convertedLong"}}}

result = collection.aggregate([convertedLong, convertedDate])
for each in result:
    print(each)

1 Ответ

0 голосов
/ 15 апреля 2020

Использование PyMon go и три входных документа:

{ "_id" : "1586908800000" }    // ISODate("2020-04-15T00:00:00Z")
{ "_id" : "1586736000000" }    // ISODate("2020-04-13T00:00:00Z")
{ "_id" : "1585094400000" }    // ISODate("2020-03-25T00:00:00Z")

Запрос для поиска документов до вчерашнего дня (сегодня 15-April-2020):

import pymongo
import datetime

client = pymongo.MongoClient()
collection = client.test.myCollection
yesterday = datetime.datetime(2020, 4, 14)
result = collection.find( { "$expr": { "$lt": [ { "$toDate": { "$toLong": "$_id" } }, yesterday ] } } )

for doc in result:
    print(doc)

Вывод имеет два документа.

...