2012-02-16 11 views
36

जब मैं मोंगोज़ के साथ काम करता हूं तो मुझे नोडजेज़ में नया दस्तावेज़ बनाने के लिए दो दृष्टिकोण मिलते हैं।नोडज/मोंगोस। दस्तावेज़ बनाने के लिए कौन सा दृष्टिकोण बेहतर है?

पहले:

var instance = new MyModel(); 
instance.key = 'hello'; 
instance.save(function (err) { 
    // 
}); 

दूसरा

MyModel.create({key: 'hello'}, function (err) { 
    // 
}); 

वहाँ कोई अंतर है?

उत्तर

36

हां, मुख्य अंतर यह है कि आप सहेजने से पहले या आपके नए मॉडल का निर्माण करते समय आने वाली जानकारी के प्रति प्रतिक्रिया के रूप में गणना करने की क्षमता है। सबसे आम उदाहरण यह सुनिश्चित करेगा कि मॉडल इसे सहेजने से पहले वैध है। कुछ अन्य उदाहरण सहेजने से पहले किसी भी लापता संबंध बना सकते हैं, अन्य गुणों के आधार पर फ्लाई पर गणना करने की आवश्यकता वाले मूल्य, और मॉडल जो मौजूद होने की आवश्यकता है लेकिन संभावित रूप से डेटाबेस (निरस्त लेनदेन) में कभी भी सहेजे नहीं जा सकते हैं।

तो चीजों में से कुछ की एक बुनियादी उदाहरण के रूप में आप कर सकता है:

var instance = new MyModel(); 

// Validating 
assert(!instance.errors.length); 

// Attributes dependent on other fields 
instance.foo = (instance.bar) ? 'bar' : 'foo'; 

// Create missing associations 
AuthorModel.find({ name: 'Johnny McAwesome' }, function (err, docs) { 
    if (!docs.length) { 
    // ... Create the missing object 
    } 
}); 

// Ditch the model on abort without hitting the database. 
if(abort) { 
    delete instance; 
} 

instance.save(function (err) { 
    // 
}); 
+4

धन्यवाद, अच्छा स्पष्टीकरण :) –

+0

इस तरह से आपको आईडी को स्वयं उत्पन्न करने की आवश्यकता होगी। mongoose.Types.ObjectId() _id के लिए प्रारूप है। –

+0

एसिंक और सिंक के बारे में, दोनों ऑपरेशन सिंक्रोनस हैं? – JohnnyQ

0

मैं पूर्व निर्धारित उपयोगकर्ता मूल्यों और सत्यापन की जाँच मॉडल पक्ष के साथ एक आसान उदाहरण पसंद करते हैं।

// Create new user. 
    let newUser = { 
     username: req.body.username, 
     password: passwordHashed, 
     salt: salt, 
     authorisationKey: authCode 
    }; 

    // From require('UserModel'); 
    return ModelUser.create(newUser); 

तो फिर तुम मॉडल कक्षा में प्रमाणकों का उपयोग करना चाहिए (इस अन्य स्थानों में इस्तेमाल किया जा सकता है, इसका मदद मिलेगी त्रुटियों को कम/विकास में तेजी लाने के)

// Save user but perform checks first. 
gameScheme.post('pre', function(userObj, next) { 
    // Do some validation. 
}); 
3

इस कोड को एक को बचाने के लिए है डाटाबेस में दस्तावेजों की सरणी:

app.get("/api/setupTodos", function (req, res) { 

var nameModel = mongoose.model("nameModel", yourSchema); 
//create an array of documents 
var listDocuments= [ 
    { 
     username: "test", 
     todo: "Buy milk", 
     isDone: true, 
     hasAttachment: false 
    }, 
    { 
     username: "test", 
     todo: "Feed dog", 
     isDone: false, 
     hasAttachment: false 
    }, 
    { 
     username: "test", 
     todo: "Learn Node", 
     isDone: false, 
     hasAttachment: false 
    } 
]; 

nameModel.create(listDocuments, function (err, results) { 

    res.send(results); 
}); 

'nameModel.create (listDocuments)' परमिट है कि मॉडल के नाम के साथ एक संग्रह बनाएं औरनिष्पादित केवल सरणी में दस्तावेज़ के लिए 10 विधि।

वैकल्पिक रूप से, आप इस तरह से एक ही दस्तावेज़ बचा सकते हैं:

var myModule= mongoose.model("nameModel", yourSchema); 

    var firstDocument = myModule({ 
     name: String, 
surname: String 
    }); 

firstDocument.save(function(err, result) { 
    if(if err) throw err; 
    res.send(result) 

});

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