user647314
user647314

Reputation: 327

MongoDB converting date to string

PROBLEM:

Error when get Y-m-d from "SentTimestamp" : ISODate("2015-12-23T22:20:15Z")

DETAILS :

document :

{
...
"SentTimestamp" : ISODate("2015-12-23T22:20:15Z")
...
}

query :

db.foo.find({}, {$dateToString: {format:"%Y-%m-%d", date:"$SentTimestamp"}})

Error :

Error: error: {
    "$err" : "Can't canonicalize query: BadValue >1 field in obj: { format: \"%Y-%m-%d\", date: \"$SentTimestamp\" }",
    "code" : 17287

Can somebody explain how can I convert date to string, what is wrong above ?

Upvotes: 8

Views: 24579

Answers (1)

chridam
chridam

Reputation: 103305

You cannot use the $dateToString operator with projection in the find() method. Instead, use it with the aggregation framework in the $addFields or $project pipeline phase to return documents that have the datetime field converted to string with the desired format, as in the following example:

Using $addFields:

db.foo.aggregate([
    { "$addFields": {
        "sentDateString": { 
            "$dateToString": { 
                "format": "%Y-%m-%d", 
                "date": "$SentTimestamp" 
            } 
        }
    } }
])

or using $project

db.foo.aggregate([
    { "$project": {
        "sentDateString": { 
            "$dateToString": { 
                    "format": "%Y-%m-%d", 
                    "date": "$SentTimestamp" 
            } 
        },
        "otherFields": 1, ....
    } }
])

Upvotes: 19

Related Questions