Camilo Urán
Camilo Urán

Reputation: 432

How to write a correct mongodb query for mongodump?

I'm trying to backup 3 articles from my database, I have their IDs but when I try to use mongodump I just can't seem to be able to write the proper json query. I get either a JSON error message, or some cryptic cannot decode objectID into a slice message.

Here's the command that I'm trying to run at the moment:

mongodump -d 'data' -c 'articles' -q '{"$oid": "5fa0bd32f7d5870029c7d421" }'

This is returning the ObjectID into a slice error, which I don't really understand. I also tried with ObjectId, like this:

mongodump -d 'data' -c 'articles' -q '{"_id": ObjectId("5fa0bd32f7d5870029c7d421") }'

But this one gives me a invalid JSON error.

I've tried all forms of escaping, escaping the double quotes, escaping the dollar, but nothing NOTHING seems to work. I'm desperate, and I hate mongodb. The closest I've been able to get to a working solution was this:

mongodump -d 'nikkei' -c 'articles' -q '{"_id": "ObjectId(5fa0bd32f7d5870029c7d421)" }'

And I say closest because this didn't fail, the command ran but it returned done dumping data.articles (0 documents) which means, if I understood correctly, that no articles were saved.

What would be the correct format for the query? I'm using mongodump version r4.2.2 by the way.

Upvotes: 1

Views: 2358

Answers (4)

Nidhi Saini
Nidhi Saini

Reputation: 1

I used the $oid approach to resolve the issue with ObjectId type of field _id in my collection in the following way, and it worked:

mongodump --uri="mongodb://localhost:27017" --out="./collection_dump" --db=test_db --collection=test_collection --query='{ "_id": { "$in": [ {"$oid": "6440985904472b43c7cf6f55"}, {"$oid": "64392d624343a91020b71e14"} ] } }

Upvotes: 0

Tim Estes
Tim Estes

Reputation: 375

Here's an answer for those using Python:

Note: you must have mongo database tools installed on your system

import json
import os

# insert you query here
query = {"$oid": "5fa0bd32f7d5870029c7d421"}
# cast the query to a string
query = json.dumps(query)

# run the mongodump
command = f"mongodump --db my_database --collection my_collection --query '{query}'"
os.system(command)

Upvotes: 0

prasad_
prasad_

Reputation: 14287

I have a collection with these 4 documents:

> db.test.find()
{ "_id" : ObjectId("5fab80615397db06f00503c3") }
{ "_id" : ObjectId("5fab80635397db06f00503c4") }
{ "_id" : ObjectId("5fab80645397db06f00503c5") }
{ "_id" : ObjectId("5fab80645397db06f00503c6") }

I make the binary export using the mongodump. This is using MongoDB v4.2 on Windows OS.

>> mongodump --db=test --collection=test --query="{ \"_id\": { \"$eq\" : { \"$oid\": \"5fab80615397db06f00503c3\" } } }"
2020-11-11T11:42:13.705+0530    writing test.test to dump\test\test.bson
2020-11-11T11:42:13.737+0530    done dumping test.test (1 document)

Upvotes: 2

Hunter Campbell
Hunter Campbell

Reputation: 56

If your query is for JSON than try this format.

mongodump -d=nikkei -c=articles -q'{"_id": "ObjectId(5fa0bd32f7d5870029c7d421)" }'

Is there nothing else you could query though, like a title? Might make things a little more simple.

I pulled this from mongoDB docs. It was pretty far down the page but here is the link.

https://docs.mongodb.com/database-tools/mongodump/#usage-in-backup-strategy

Upvotes: 0

Related Questions