MongoDB/PyMongo: BadValue Unsupported projection option when trying to query all dates after

13,802

If you want to apply a filter, use the first positional argument to find():

tweets_iterator = coll.find({'created_at': {'$gt': date1}}, {"text": 1, "user.screen_name": 1, 'created_at': 1})
Share:
13,802
jjjayn
Author by

jjjayn

Updated on August 29, 2022

Comments

  • jjjayn
    jjjayn over 1 year

    I've build a Twitter scraper that stores tweets into MongoDB. Now I'm trying to query the data with PyMongo.

    Stored data in my MongoDB:

    {
        "_id": {
            "$oid": "5555dc0e50f808afe0da52fe"
        },
        "text": "Lorem Ipsum...",
        "created_at": {
            "$date": "2015-05-15T10:55:16.000Z"
        },
    }
    

    Following works perfectly fine (but fetches every tweet ever tweeted):

    dikt1 = {}
    tweets_iterator = coll.find({},{ "text": 1, "user.screen_name":1 ,created_at': 1} )
    
    for tweet in tweets_iterator:
            dikt1[tweet['text']] = tweet['created_at']
    

    However when trying to query all dates after certain dates like this:

    date1 = datetime.utcnow()-timedelta(days=30)
    dikt1 = {}
    tweets_iterator = coll.find({},{ "text": 1, "user.screen_name":1 , 'created_at': {'$gt': date1}} )
    for tweet in tweets_iterator:
            dikt1[tweet['text']] = tweet['created_at']
    

    The last line "for tweet in tweets_iterator:" gives an error:

    OperationFailure: database error: Can't canonicalize query: BadValue Unsupported projection option: created_at: { $gt: new Date(1434480147418) }

    Any advices?

    Thanks!