2012-12-10 14 views
10

मैं एक छोटा सा एप्लीकेशन लिख रहा हूं जो कीवर्ड स्कोर करता है। तो यदि "बेरूत" और "शिक्षा" में प्रवेश किया गया है, अगर उन्हें पहले नहीं देखा गया है, तो मैं एक मोंगो प्रविष्टि बनाना चाहता हूं, और उन्हें 1 का स्कोर देना चाहता हूं। यदि उनके पास है, तो मैं उनके स्कोर को एक से बढ़ा सकता हूं । मैं इसे एक अपडेट कमांड के साथ करने की कोशिश कर रहा हूं, लेकिन मुझे लगता है कि मैं इसे गलत कर रहा हूं।Node.js MongoDB अप्सर्ट अपडेट

  • कीवर्ड
rankingdb.update(
    {keyword:key}, 
    {keyword:key, {$inc:{score:1}}}, 
    {upsert:true, safe:false}, 
    function(err, data) { 
     if (err) { 
      console.log(err); 
     } 
     else { 
      console.log("score succeeded"); 
     } 
    } 
); 

SyntaxError: Unexpected token {

आप एक वेतन वृद्धि के साथ एक नया दस्तावेज़ नहीं बना सकता रैंकिंग वस्तु डेटाबेस का प्रतिनिधित्व कर रहा है

  • "कुंजी" है?

  • उत्तर

    18

    आपका सामान्य दृष्टिकोण सही है, लेकिन जैसा कि त्रुटि संदेश बताता है, आपको अपने कोड में एक वाक्यविन्यास समस्या मिली है।

    ऐसा करें:

    rankingdb.update(
        {keyword: key}, 
        {$inc: {score: 1}}, 
        {upsert: true, safe: false}, 
        function(err,data){ 
         if (err){ 
          console.log(err); 
         }else{ 
          console.log("score succeded"); 
         } 
        } 
    ); 
    

    एक Upsert एक नई वस्तु यह चयनकर्ता से क्षेत्रों को जोड़ती है (पहले पैरामीटर) और अद्यतन वस्तु (दूसरा पैरामीटर) बनाने के लिए की जरूरत है जब आप ऐसा वस्तु बनाते समय डॉन दोनों में keyword फ़ील्ड को शामिल करने की आवश्यकता नहीं है।

    नोट करें कि update() को 2.0 ड्राइवर में बहिष्कृत किया गया है, इसलिए अब आपको updateOne() या updateMany() का उपयोग करना चाहिए।

    +0

    वंडरफुल! एक चार की तरह काम किया। आसान काम करता है! – mradfo21

    संबंधित मुद्दे