मोंगोज़ हमेशा मेरे संग्रह नाम के अंत में एक एस क्यों जोड़ता है


120

उदाहरण के लिए, यह कोड "डेटा" नामक संग्रह में परिणामित होता है

var Dataset = mongoose.model('data', dataSchema);

और इस कोड के परिणामस्वरूप "उपयोगकर्ता" नामक एक संग्रह तैयार होता है

var User = mongoose.model('user', dataSchema);

धन्यवाद


3
यह रेल में सम्मेलन है। आपके पास ऑब्जेक्ट "उपयोगकर्ता" है, आप इसे "उपयोगकर्ता" संग्रह में संग्रहीत करते हैं। यह मानगो में एक ही है, मुझे लगता है।
सर्जियो तुलेंत्सेव

हाँ, दिलचस्प रूप से पर्याप्त var Dataset = mongoose.model ('डेटा', डेटाशमा); डेटा नामक संग्रह में परिणाम।
बॉब रेन

लगता है कि बहुवचन तर्क वह गूंगा नहीं है (या स्मार्ट, यह इस बात पर निर्भर करता है कि आपने क्या उम्मीद की थी)। मुझे यकीन है कि आप यह पता लगा सकते हैं कि यह कैसे काम करता है (स्रोत को खोजें)।
सर्जियो तुलेंत्सेव

2
@SergioTulentsev, जो माणिक नहीं है, लेकिन यह उसी तरह से काम करता है जैसे कि github.com/LearnBoost/mongoose/blob/master/lib/utils.js

7
सिर्फ रिकार्ड के लिए। डेटा बहुवचन है, डेटा का एकवचन डेटा है
लुइस सिएरा

जवाबों:


200

Mongoose आपके संग्रह नाम को बहुवचन बनाकर स्मार्ट बनने की कोशिश कर रहा है। हालाँकि आप इसे जो चाहें करने के लिए मजबूर कर सकते हैं:

var dataSchema = new Schema({..}, { collection: 'data' })


31
मुझे समझ में नहीं आया कि "एस" जोड़ने से फ्रेमवर्क अधिक बुद्धिमान कैसे हो जाता है, आईएमएचओ, यह एक बुरा विचार है। इसके अलावा मानगो एक कमाल का ढांचा है।
रॉबर्टो

14
एक पुरानी खराब पसंद जो बाहर ले जाने पर पिछड़ी अनुकूलता को तोड़ती है। इसलिए हमने इसके साथ रहना चुना है।
अनरोनचेकमैन

18
यह सिर्फ एक 's' नहीं जोड़ता है, लेकिन यह नाम का सही बहुवचन बनाता है। 'माउस' के साथ उदाहरणों के लिए प्रयास करें, आपको 'चूहे' नाम का एक संग्रह मिलेगा या 'व्यक्ति' के साथ आपको 'लोग' मिलेंगे। यह मुझे यह समझने के लिए पागल कर रहा था कि ये नाम :-)
एनरिको ज्यूरिन

3
यह बहुत ही पागल है अब आप अपने संग्रह को क्वेरी करने के लिए किस नाम का उपयोग करते हैं जब आपको इसे किसी अन्य इंटरफ़ेस से करना होता है?
Xsmael

8
मैं बाहर निकल रहा था, क्योंकि मैंने "ब्रश" को परिभाषित किया था और "ब्रश" नाम का एक संग्रह था। मैं खोजने की कोशिश कर रहा था कि मैं कहाँ परिभाषित करूँगा कि लगभग आधे घंटे के लिए और कुछ भी नहीं मिला। मैंने सोचा: "हो सकता है कि यह स्मार्ट हो और वह इसे जोड़ता है। शायद नहीं, लेकिन चलो .... फ़्यूयुउउउउ"
फुस्सलीबेब

49

Mongoose.model की एपीआई संरचना यह है:

Mongoose#model(name, [schema], [collection], [skipInit])

मानगो क्या करता है, जब कोई संग्रह तर्क पारित नहीं होता है, तो Mongoose मॉडल नाम का बहुवचन करके एक संग्रह नाम का उत्पादन करता है। यदि आपको यह व्यवहार पसंद नहीं है, तो या तो संग्रह नाम पास करें या अपना स्कीमा संग्रह नाम विकल्प सेट करें।

उदाहरण:

var schema = new Schema({ name: String }, { collection: 'actor' });

या

schema.set('collection', 'actor');

या

var collectionName = 'actor'
var M = mongoose.model('Actor', schema, collectionName);

30

5. आम से शुरू करके आप इसे पूरी तरह से निष्क्रिय कर सकते हैं:

mongoose.pluralize(null);

सबसे अच्छा समाधान, क्योंकि हमें मॉडल नाम और संग्रह नाम दोनों को परिभाषित करने की आवश्यकता नहीं है।
नेझीह

यह निश्चित रूप से सबसे अच्छा तरीका है।
netishix

1
मोंगोज की इस तरह की स्मार्टनेस के बारे में जानने में मुझे कुछ घंटे लगे। वैसे भी - खुशी है कि मुझे यह समाधान मिला। BTW: यह संग्रह नामों के स्वचालित कम आवरण से भी बचता है।
बर्नहार्ड फुरस्ट

8

आप संग्रह के वास्तविक नाम को परिभाषित करने के लिए तीसरे तर्क के रूप में एक स्ट्रिंग जोड़ सकते हैं। क्रमशः dataऔर userक्रमशः नाम रखने के लिए अपने उदाहरणों का विस्तार :

var Dataset = mongoose.model('data', dataSchema, 'data');

var User = mongoose.model('user', dataSchema, 'user');

2

आप तीसरे पैरामीटर के रूप में संग्रह नाम जोड़ सकते हैं। टाइपस्क्रिप्ट का उपयोग करके उदाहरण देखें:

import DataAccess = require('../DataAccess');
import IUser = require("../../Models/Interfaces/IUser");

var mongoose = DataAccess.mongooseInstance;
var mongooseConnection = DataAccess.mongooseConnection;

class UserSchema {
        static get schema () {
        var schema =  mongoose.Schema({
            _id : {
                type: String
            },
            Name: {
                type: String,
                required: true
            },
            Age: {
                type: Number,
                required: true
            }
        });

        return schema;
    }
}
var schema:any = mongooseConnection.model<IUser>("User", 
UserSchema.schema,"User");
export = schema;

2
//Mongoose's definition file. NOT your model files
1 const mongoose = require("mongoose");
2 mongoose.pluralize(null);

mongoose.pluralize(null)आपकी Mongoose फ़ाइल में लाइन जोड़ने से संग्रह नाम बहुवचन को रोका जा सकेगा। आपको अपनी मॉडल फ़ाइलों में इस पंक्ति को जोड़ने की आवश्यकता नहीं है।

जैसा कि यहां देखा गया है


1

अगली पंक्ति में अपने स्कीमा को परिभाषित करने के अंत में इस कोड का उपयोग करें

module.exports = mongoose.model("State", "StateSchema", "state")

यह मानते हुए कि आपका राज्य वह है जो आप अपने db पर राज्यों के रूप में उपयोग करने से बचना चाहते हैं

चित्र को ठीक से देखने के लिए लिंक पर क्लिक करें


-2

जब आप इस कमांड को चलाते हैं तो Mongoose आपके लिए एक मॉडल संकलित करता है

var schema = new mongoose.Schema({ name: 'string', size: 'string' });
var child = mongoose.model('child', schema);

पहला तर्क आपके मॉडल के संग्रह का विलक्षण नाम है। Mongoose स्वचालित रूप से आपके मॉडल नाम के बहुवचन, निचले स्तर वाले संस्करण की तलाश करता है। इस प्रकार, ऊपर दिए गए उदाहरण के लिए, मॉडल बच्चा डेटाबेस में बच्चों के संग्रह के लिए है।

नोट:.model() समारोह स्कीमा की एक प्रतिलिपि बनाता। सुनिश्चित करें कि आपने कॉल करने से पहले, हुक सहित स्कीमा को जो भी आप चाहते हैं, सब कुछ जोड़ दिया है .model()!


आप समस्या को फिर से बना रहे हैं?
पेड्रो जेआर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.