2014-07-14 15 views
12

में अपडेट और रिटर्न दस्तावेज़ मैं अद्यतन दस्तावेज़ प्राप्त करना चाहता हूं। यह मेरा मूल कोड है और यह सफलतापूर्वक अपडेट करता है लेकिन दस्तावेज़ वापस नहीं करता है।मोंगोड

collection.update({ "code": req.body.code },{$set: req.body.updatedFields}, function(err, results) { 
         res.send({error: err, affected: results}); 
         db.close(); 
        }); 

मैं toArray फ़ंक्शन का उपयोग किया है, लेकिन इस त्रुटि "एक प्रदान की कॉलबैक के बिना एक writeConcern उपयोग नहीं कर सकते" दिया:

collection.update({ "code": req.body.code },{$set: req.body.updatedFields}).toArray(function(err, results) { 
        res.send({error: err, affected: results}); 
        db.close(); 
       }); 

कोई भी विचार?

उत्तर

16

collection.update() केवल अपने कॉलबैक से प्रभावित दस्तावेज़ों की संख्या की रिपोर्ट करेगा।

संशोधित करते समय दस्तावेज़ों को पुनर्प्राप्त करने के लिए, आप इसके बजाय collection.findOneAndUpdate() (पूर्व में .findAndModify()) का उपयोग कर सकते हैं।

collection.findOneAndUpdate(
    { "code": req.body.code }, 
    { $set: req.body.updatedFields }, 
    { new: true }, 
    function (err, documents) { 
     res.send({ error: err, affected: documents }); 
     db.close(); 
    } 
); 

ध्यान दें कि यह सभी मिलान दस्तावेजों जहां .update() उम्मीद multi: true भी ऐसा ही करने को संशोधित करेगा।

नोट: वर्तमान में Node.js ड्राइवर को version 2.2 के रूप में संदर्भित करता है। भविष्य के संस्करणों के लिए, दस्तावेज़ीकरण के भीतर बहिष्करण चेतावनियों की जांच करें और इसके बजाय अनुशंसित विकल्पों का उपयोग करें।

+5

दस्तावेज़ों का सुझाव है कि यह केवल एक दस्तावेज़ करता है, एकाधिक नहीं - –

+2

अब इसे बहिष्कृत किया गया है। इसके बजाय 'collection.findOneAndUpdate' का उपयोग करें! –

+1

findOneAndUpdate राज्य में दस्तावेज़ को पुनर्प्राप्त करने लगता है, यह संशोधित होने से पहले है। मुझे लगता है कि यह परिणाम परिणाम ऑब्जेक्ट – nohorbee

1

चेकआउट WriteResult वस्तु: यदि आप अद्यतन परिणाम चाहते हैं

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 

, प्राथमिक कुंजी के साथ एक और क्वेरी कार्य करें:

http://docs.mongodb.org/manual/reference/method/db.collection.update/#writeresults-update

WriteResult result = collection.update({ "code": req.body.code },{$set: req.body.updatedFields}, function(err, results) { 
        res.send({error: err, affected: results}); 
        db.close(); 
       }); 

परिणाम की तरह कुछ होना चाहिए।

+0

यह केवल आँकड़े देता है:

कम से कम एक गलती है कि मैं के साथ नीचे दी गई विधि है पा सकते हैं, आप अगर दस्तावेज़ संशोधित किया गया है या पहले से ही मूल्य है कि आप प्रयोग कर रहे हैं के लिए किया था बताने के लिए सक्षम नहीं होगा अपडेट किए गए दस्तावेज़ – mido

1

कई को अपडेट करने और docs में संशोधित रिकॉर्ड वापस करने का कोई तरीका नहीं मिला, इसलिए मैंने एक कामकाज किया। ,

function findAndUpdateMany(filter, updateOptions) { 
    return collection.find(filter).project({_id: 1}).toArray() 
    .then(function(matchingIds) { 
     filter = {_id: {$in: matchingIds}} 
     return collection.updateMany(filter, updateOptions) 
    }).then(function() { 
     return collection.find(filter).toArray() 
    }) 
} 
संबंधित मुद्दे