Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I turn MongoDB query into a JSON?

for p in db.collection.find({"test_set":"abc"}):     posts.append(p) thejson = json.dumps({'results':posts}) return  HttpResponse(thejson, mimetype="application/javascript") 

In my Django/Python code, I can't return a JSON from a mongo query because of "ObjectID". The error says that "ObjectID" is not serializable.

What do I have to do? A hacky way would be to loop through:

for p in posts:     p['_id'] = "" 
like image 737
TIMEX Avatar asked Dec 10 '10 01:12

TIMEX


People also ask

How do I export MongoDB query results?

Once connected to a MongoDB database, open the Export Wizard by clicking on Export in the Global Toolbar. Alternatively, you can right-click on any server, database, or collection in the Connection Tree and choose Export (Collections, Buckets, Views).

Is MongoDB in JSON format?

Anything you can represent in JSON can be natively stored in MongoDB, and retrieved just as easily in JSON. The following are some example documents (in JavaScript / Python style syntax) and their corresponding BSON representations.


2 Answers

The json module won't work due to things like the ObjectID.

Luckily PyMongo provides json_util which ...

... allow[s] for specialized encoding and decoding of BSON documents into Mongo Extended JSON's Strict mode. This lets you encode / decode BSON documents to JSON even when they use special BSON types.

like image 83
Justin Jenkins Avatar answered Oct 11 '22 21:10

Justin Jenkins


Here is a simple sample, using pymongo 2.2.1

import os import sys import json import pymongo from bson import BSON from bson import json_util  if __name__ == '__main__':   try:     connection = pymongo.Connection('mongodb://localhost:27017')     database = connection['mongotest']   except:     print('Error: Unable to Connect')     connection = None    if connection is not None:     database["test"].insert({'name': 'foo'})     doc = database["test"].find_one({'name': 'foo'})     return json.dumps(doc, sort_keys=True, indent=4, default=json_util.default) 
like image 33
kelsmj Avatar answered Oct 11 '22 20:10

kelsmj