मैं मोंगोडीबी और फ्लास्क (पिमोंगो ड्राइवर का उपयोग करके) का उपयोग करके एक वेब सेवा बनाने का प्रयास कर रहा हूं। डेटाबेस के लिए एक क्वेरी निश्चित रूप से "_id" फ़ील्ड के साथ दस्तावेज़ लौटाती है। मैं इसे क्लाइंट को नहीं भेजना चाहता, तो मैं इसे कैसे हटा सकता हूं?Pymongo से _id तत्व को हटाने के परिणाम
@app.route('/theobjects')
def index():
objects = db.collection.find()
return str(json.dumps({'results': list(objects)},
default = json_util.default,
indent = 4))
यह रिटर्न:
{
"results": [
{
"whatever": {
"field1": "value",
"field2": "value",
},
"whatever2": {
"field3": "value"
},
...
"_id": {
"$oid": "..."
},
...
}
]}
मैंने सोचा कि यह एक शब्दकोश था और मैं बस इसे लौटने से पहले तत्व हटा सकता है:
del objects['_id']
यहाँ एक बोतल मार्ग है लेकिन यह एक टाइप एरर देता है:
TypeError: 'Cursor' object does not support item deletion
तो यह एक शब्दकोश नहीं है, लेकिन मुझे एक शब्द के रूप में प्रत्येक परिणाम के साथ फिर से शुरू करना है। तो मुझे लगता है कि ऐसा करने के लिए इस कोड के साथ प्रयास करें:
for object in objects:
del object['_id']
प्रत्येक वस्तु शब्दकोश तरीका लग रहा है मैं यह करने के लिए अब चाहते हैं, लेकिन वस्तुओं कर्सर खाली है। तो मैं एक नया शब्दकोश बनाने के लिए कोशिश करते हैं और प्रत्येक से _ id को हटाने के बाद, एक नया शब्दकोश कि बोतल वापस आ जाएगी में जोड़ें:
new_object = {}
for object in objects:
for key, item in objects.items():
if key == '_id':
del object['_id']
new_object.update(object)
यह सिर्फ प्रथम स्तर चाबियाँ और कुछ नहीं के साथ एक शब्दकोश देता है।
तो यह एक मानक नेस्टेड शब्दकोश की समस्या है, लेकिन मुझे यह भी आश्चर्य हुआ कि मोंगोडीबी के पास आसानी से निपटने का कोई तरीका नहीं है।
MongoDB documentation बताते हैं कि आप
{ _id : 0 }
साथ _ id बाहर कर सकते हैं लेकिन उस pymongo साथ कुछ नहीं करता है। Pymongo documentation बताता है कि आप उन फ़ील्ड को सूचीबद्ध कर सकते हैं जिन्हें आप लौटा चाहते हैं, लेकिन "(" _id "हमेशा शामिल किया जाएगा)"। गंभीरता से? क्या इसके चारों ओर कोई रास्ता नहीं है? क्या कोई सरल और बेवकूफ है कि मैं यहां देख रहा हूं?
आपका वास्तविक दावा यहां क्या है? नया नियम बनाने के लिए आपका कोड अजीब और जरूरी नहीं है। आपकी असली समस्या क्या है? –
मेरी समस्या यह थी कि .find ({}, {'_id': गलत}} _id को छोड़ नहीं रहा था। हालांकि यह मेरे कोड के साथ एक समस्या थी और अब यह काम कर रहा है। आपकी सहायता के लिए धन्यवाद. – ddw
"लेकिन ऑब्जेक्ट कर्सर खाली है": ऐसा इसलिए है क्योंकि आप केवल एक बार फिर से सक्रिय कर सकते हैं, इसलिए आपको फिर से प्रयास करना होगा, अगला निर्देश प्राप्त करना होगा, '_id' को हटाएं, एक सूची में dict डाल दें, और अंत में उस सूची को वापस न करें, न कि वस्तुओं। –