কেন মঙ্গুজ সবসময় আমার সংগ্রহের নামের শেষে একটি এস যুক্ত করে


120

উদাহরণস্বরূপ, এই কোডটির ফলাফল তৈরি করা হচ্ছে "ডেটাস" নামে একটি সংকলনে

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

এবং এই কোডটির ফলাফল তৈরি করা হচ্ছে "ব্যবহারকারী" নামে একটি সংকলন

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

ধন্যবাদ


3
এটি রিলেদের সম্মেলন আপনার "ব্যবহারকারী" অবজেক্ট রয়েছে, আপনি এটি "ব্যবহারকারী" সংগ্রহে সংরক্ষণ করেন। আমার ধারণা, মোঙ্গুজেও এটি একই রকম।
সার্জিও টুলেন্টসেভ

হ্যাঁ, আকর্ষণীয়ভাবে যথেষ্ট ডেটাসেট = মঙ্গুজ.মডেল ('ডেটাস', ডেটাস্কেমা); ডেটাস নামে একটি সংকলনের ফলাফল।
বব রেন

দেখে মনে হচ্ছে যে বহুবচনের যুক্তিটি সেই বোবা নয় (বা স্মার্ট, আপনি যা প্রত্যাশা করেছিলেন তার উপর নির্ভর করে)। আমি নিশ্চিত যে এটি ঠিক কীভাবে কাজ করে তা আপনি জানতে পারবেন (উত্সটি সন্ধান করুন)।
সেরজিও টুলেন্টসেভ

2
@SergioTulentsev, যে রুবি নয়, কিন্তু এটি একই ভাবে কাজ করে github.com/LearnBoost/mongoose/blob/master/lib/utils.js

7
শুধু মাত্র নথির জন্য. ডেটা বহুবচনের, ডেটাগুলির
একবাক্যটি

উত্তর:


200

মঙ্গুজ আপনার সংগ্রহের নামটি বহুবচন করে স্মার্ট হওয়ার চেষ্টা করছেন। তবে আপনি এটি যা চান তা করতে বাধ্য করতে পারেন:

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


31
আমি বুঝতে পারি না কীভাবে "এস" যুক্ত করা কাঠামোটিকে আরও বুদ্ধিমান করে তোলে, আইএমএইচও, এটি একটি খারাপ ধারণা। মঙ্গু ছাড়াও একটি দুর্দান্ত কাঠামো।
রবার্তো

14
এটি একটি পুরানো দুর্বল পছন্দ যা যদি বাইরে নিয়ে যায় তবে পশ্চাদপটে সামঞ্জস্যতা ভঙ্গ করে। তাই আমরা এটির সাথে লেগে থাকতে বেছে নিয়েছি।
অ্যারোনহেকম্যান

18
এটি কেবল একটি 's' যুক্ত করে না তবে এটি নামের সঠিক বহুবচন তৈরি করে। 'মাউস' দিয়ে উদাহরণগুলির জন্য চেষ্টা করুন, আপনি 'ইঁদুর' নামে একটি সংগ্রহ পাবেন বা 'ব্যক্তি' দিয়ে আপনি 'মানুষ' পাবেন। এই নামগুলি কোথা থেকে এসেছে তা বুঝতে
পেরে

3
এটি এখন খুব ক্রেজি যে আপনি নিজের নামটি অন্য ইন্টারফেস থেকে করতে হবে যখন আপনার সংগ্রহটি স্পষ্টভাবে জিজ্ঞাসা করতে আপনি কোন নামটি ব্যবহার করেন?
এক্সএমএল

8
আমি প্রকাশ করছি, কারণ আমি "ব্রাশ" সংজ্ঞায়িত করেছি এবং সেখানে "ব্রাশ" নামে একটি সংগ্রহ ছিল collection আমি প্রায় অর্ধ ঘন্টার জন্য যেখানে সংজ্ঞায়িত করেছি এবং কিছুই খুঁজে পেলাম না সেদিকে অনুসন্ধান করার চেষ্টা করছিলাম। আমি ভেবেছিলাম: "সম্ভবত এটি স্মার্ট এবং এটি যুক্ত করে। সম্ভবত এটি নয়, তবে আসুন .... FUUUUUUU"
ফ্যাসেলডিবি

49

মঙ্গুজ.মোডেলের এপিআই কাঠামোটি হ'ল:

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

মঙ্গুজ যা করেন তা হ'ল, যখন কোনও সংগ্রহের যুক্তিটি পাস না করা হয়, তখন মোঙ্গুজ মডেলের নামটি বহুবচন করে সংগ্রহের নাম তৈরি করে। আপনি যদি এই আচরণটি পছন্দ না করেন তবে হয় সংগ্রহের নামটি পাস করুন বা আপনার স্কিমাস সংগ্রহের নাম বিকল্প সেট করুন।

উদাহরণ:

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

অথবা

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

অথবা

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

30

মঙ্গুজ ৫.x থেকে শুরু করে আপনি এটি পুরোপুরি অক্ষম করতে পারবেন:

mongoose.pluralize(null);

সর্বোত্তম সমাধান, কারণ আমাদের মডেল নাম এবং সংগ্রহের নাম উভয়ই সংজ্ঞায়িত করতে হবে না।
নেজিহ

এটি অবশ্যই সেরা পন্থা।
নেটিশিক্স

1
মুঙ্গুসের এই ধরণের স্মার্টনেস সম্পর্কে জানতে কয়েক ঘন্টা সময় লাগল। যাইহোক - খুশী আমি এই সমাধানটি পেয়েছি। বিটিডাব্লু: এটি সংগ্রহের নামগুলি স্বয়ংক্রিয়ভাবে লোয়ার কেসিং এড়িয়ে চলে।
বার্নহার্ড ফার্স্ট

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)আপনার মঙ্গুজ ফাইলে লাইন যুক্ত করা সংকলনের নাম বহুবচন রোধ করবে। আপনার মডেল ফাইলগুলিতে এই লাইনটি যুক্ত করার দরকার নেই।

যেমনটি এখানে দেখা যায় ।


1

পরের লাইনে আপনার স্কিমা সংজ্ঞা দেওয়ার শেষে এই কোডটি ব্যবহার করুন

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

ধরে নিই যে আপনার রাজ্যটি আপনার ডিবিতে রাজ্য হিসাবে এড়াতে আপনি কী ব্যবহার করতে চান

ছবিটি সঠিকভাবে দেখতে লিংকে ক্লিক করুন


-2

আপনি যখন এই আদেশটি চালাবেন তখন মঙ্গুজ আপনার জন্য একটি মডেল তৈরি করে iles

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

প্রথম যুক্তি হ'ল আপনার মডেলটি সংগ্রহের একক নাম। মঙ্গুজ স্বয়ংক্রিয়ভাবে আপনার মডেল নামের বহুবচন, নিম্নরূপী সংস্করণ সন্ধান করে। সুতরাং, উপরের উদাহরণের জন্য, মডেল শিশুটি ডাটাবেসে শিশু সংগ্রহের জন্য।

দ্রষ্টব্য:.model() ফাংশন স্কিমা একটি কপি করে তোলে। কল করার আগে হুকস সহ আপনি স্কিমাতে যা কিছু চান তা আপনি যুক্ত করেছেন তা নিশ্চিত করুন .model()!


আপনি সমস্যা পুনরুদ্ধার করছেন?
পেড্রো জেআর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.