简体   繁体   中英

How to Store dictionary as array object within a mongodb field

I have MongoDB collection with many documents each with fields that looks like the one shown in the picture. The problem is with the field "searched". Its values are stored as a string because of which I cannot do a query for values like this {"searched.image_hash":"some_value"}. I use python to store values into MongoDB. In python, The variable "to_search" which is stored as "searched" in mongo is in fact a dictionary. Am not sure why the dictionary in "to_search" variable is stored as string within the mongodb "searched" field. Any suggestion as how to store the dictionary as array of object in mongodb?

在此处输入图片说明

The code I used in python is as follows

i have many other keys going into dictionary 'di'
        di['account_id'] = acc_num
        di['searched']= to_search
        di['breakdown_queried'] = breakdown_to_query
        di['combination']= [ele for ele in to_search.keys()]
        di['ad_ids'] = ad_ids
        di['date'] = date.today()
        lo_str= ''
        di = {k: str(v) for k, v in di.items()}
        mongo_obj_remote.client["dev"]["ad_stats_tracker"].delete_one({"_id": {"$in": [di['_id']]}})
        di_key_li = ['_id','account_id','date', 'combination','searched', 'ad_ids','breakdown_queried']
        mongo_obj_remote.insert_single_document("dev", "ad_stats_tracker", {key: di[key] for key in di_key_li})

If your data in to_search is a python dict (and not a string that looks like one), then the pymongo drivers will store the data as a BSON "object", not a string; affectively this creates a sub-document within the document being stored in the collection.

Looking at your data I would suggest that your to_search is actually a string; the format is not valid for a dict as it contains a set (which pymongo won't be able to store in mongodb anyway).

You can check it with a small amount of debug code just before you insert the data:

print(type(di['searched']))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM