I have a collection with a location field that was entered in the wrong order:
location: [38.7633698, -121.2697997]
When I try to place a 2
Starting from MongoDB 3.4 we can use the $reverseArray operator to do this beautifully.
db.collection.aggregate(
[
{ "$project": { "location": { "$reverseArray": "$location" } } }
]
)
which yields:
{
"_id" : ObjectId("576fdc687d33ed2f37a6d527"),
"location" : [ -121.2697997, 38.7633698 ]
}
To update all the documents in your collection, you have a couple of options.
The first is to add a $out stage to your pipeline and replace the old collection. In this case, you will need to explicitly include all the other field in the $projection stage. The $out
stage look like this:
{ "$out": "collection" }
db.loc.find().forEach(function (doc) {
var loc = [ doc.location[1], doc.location[0] ];
db.loc.update(doc, { $set: { location: loc } });
})