মোঙ্গুজ একবার সংকলিত মডেল ওভাররাইট করা যায় না


109

আমি কী ভুল করছি তা নিশ্চিত নয়, আমার চেক.জেএস এখানে রয়েছে

var db = mongoose.createConnection('localhost', 'event-db');
db.on('error', console.error.bind(console, 'connection error:'));

var a1= db.once('open',function(){
var user = mongoose.model('users',{ 
       name:String,
       email:String,
       password:String,
       phone:Number,
      _enabled:Boolean
     });

user.find({},{},function (err, users) {
    mongoose.connection.close();
    console.log("Username supplied"+username);
    //doSomethingHere })
    });

এবং এখানে আমার insert.js

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/event-db')

var user = mongoose.model('users',{
     name:String,
     email:String,
     password: String,
     phone:Number,
     _enabled:Boolean
   });

var new_user = new user({
     name:req.body.name,
     email: req.body.email,
     password: req.body.password,
     phone: req.body.phone,
     _enabled:false
   });

new_user.save(function(err){
    if(err) console.log(err); 
   });

যখনই আমি চেক.জেএস চালানোর চেষ্টা করছি, আমি এই ত্রুটিটি পেয়ে যাচ্ছি

'ব্যবহারকারীদের' মডেল একবার সংকলিত ওভাররাইট করা যাবে না

আমি বুঝতে পারি যে এই ত্রুটিটি স্কিমার অমিলের কারণে এসেছিল তবে আমি দেখতে পাচ্ছি না এটি কোথায় ঘটছে? আমি মঙ্গুজ এবং নোডজেএসে বেশ নতুন।

আমি আমার মঙ্গোডিবি এর ক্লায়েন্ট ইন্টারফেস থেকে যা পাচ্ছি তা এখানে:

MongoDB shell version: 2.4.6 connecting to: test 
> use event-db 
  switched to db event-db 
> db.users.find() 
  { "_id" : ObjectId("52457d8718f83293205aaa95"), 
    "name" : "MyName", 
    "email" : "myemail@me.com", 
    "password" : "myPassword", 
    "phone" : 900001123, 
    "_enable" : true 
  } 
>

আমি আমার মঙ্গোডিবি এর ক্লায়েন্ট ইন্টারফেস থেকে যা পাচ্ছি তা এখানে: মঙ্গোডিবি শেল সংস্করণ: 2.4.6 এর সাথে সংযুক্ত হচ্ছে: পরীক্ষা> ইভেন্ট ইভেন্ট-ডিবি ব্যবহার করুন ডিবি ইভেন্ট-ডিবি> ডিবি.ইউজার্স.ফাইন্ডে স্যুইচড () to "_আইডি": অবজেক্টআইড ("52457d8718f83293205aaa95"), "নাম": "মাইনেম", "ইমেল": "myemail@me.com", "পাসওয়ার্ড": "মাইপাসওয়ার্ড", "ফোন": 900001123, "_ সক্ষম": সত্য}>
অ্যানথেমা .27

উত্তর:


110

ত্রুটিটি ঘটছে কারণ আপনার ইতিমধ্যে একটি স্কিমা সংজ্ঞায়িত হয়েছে, এবং তারপরে আপনি আবার স্কিমাটি সংজ্ঞায়িত করছেন। সাধারণত আপনার যা করা উচিত তা হ'ল একবার স্কিমা ইনস্ট্যান্ট করা, এবং তারপরে এটির প্রয়োজন হলে কোনও বিশ্বব্যাপী এটি কল করুন।

উদাহরণ স্বরূপ:

user_model.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var userSchema = new Schema({
   name:String,
   email:String,
   password:String,
   phone:Number,
   _enabled:Boolean
});
module.exports = mongoose.model('users', userSchema);          

check.js

var mongoose = require('mongoose');
var User = require('./user_model.js');

var db = mongoose.createConnection('localhost', 'event-db');
db.on('error', console.error.bind(console, 'connection error:'));
var a1= db.once('open',function(){
  User.find({},{},function (err, users) {
    mongoose.connection.close();
    console.log("Username supplied"+username);
    //doSomethingHere 
  })
});

insert.js

var mongoose = require('mongoose');
var User = require('./user_model.js');

mongoose.connect('mongodb://localhost/event-db');
var new_user = new User({
    name:req.body.name
  , email: req.body.email
  , password: req.body.password
  , phone: req.body.phone
  , _enabled:false 
});
new_user.save(function(err){
  if(err) console.log(err); 
});

69
মডেল রফতানি / প্রয়োজনীয়তা এড়ান - যদি refঅন্য কোনও মডেলগুলির কাছে থাকে তবে এটি নির্ভরশীল দুঃস্বপ্নের কারণ হতে পারে। var User = mongoose.model('user')পরিবর্তে ব্যবহার করুন require
wprl

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

1
@wprl আপনি আরও ব্যাখ্যা করতে পারেন? এটির প্রয়োজনে সমস্যা কেন তৈরি হবে?
varuog

এই উত্তরটি বিভ্রান্তিকর। আসল সত্যটি হ'ল যদি কেবলমাত্র একটি মঙ্গোডিবি সার্ভার দৃষ্টান্ত এবং আরও ডেটাবেস থাকে, আপনি যদি অন্য অ্যাপ্লিকেশনটিতে ইতিমধ্যে নেওয়া একটি ডাটাবেস সংজ্ঞায়িত করেন তবে আপনার ত্রুটি হয়েছে।
সোজা

174

সুতরাং আপনি এই ত্রুটিটি পেতে পারেন এমন আরও একটি কারণ হ'ল যদি আপনি একই ফাইলগুলিতে বিভিন্ন ফাইলগুলিতে ব্যবহার করেন তবে আপনার require পথটির ক্ষেত্রে আলাদা কেস রয়েছে। উদাহরণস্বরূপ আমার পরিস্থিতিতে আমার ছিল:

require('./models/User')একটি ফাইলে এবং তারপরে অন্য একটি ফাইলে যেখানে আমার থাকা ব্যবহারকারী মডেলটিতে আমার অ্যাক্সেস দরকার require('./models/user')

আমার ধারণা মডিউলগুলি দেখার জন্য এবং মঙ্গুজ এটি অন্য একটি ফাইল হিসাবে বিবেচনা করছে। একবার আমি নিশ্চিত করেছিলাম যে কেস উভয় ক্ষেত্রেই মিলেছে তবে এটি আর সমস্যা নয়।


7
এটি প্রকৃতপক্ষে খুব জটিল সমস্যা - আমি মনে করি এটি ওএস নির্দিষ্ট (এটি এফএস ক্ষেত্রে উপেক্ষা করার সাথে সাথে এটি কেবল ম্যাক এবং উইন্ডোতে হওয়া উচিত)। আমার এই সমস্যাটি ছিল, তবে ভাগ্যক্রমে আপনার উত্তরটি দেখেছি :) অনেক ধন্যবাদ জনি!
মিরোস্লাভ নেদিয়ালকভ

6
এই সমস্যাটি আমার ওএস এক্স সিস্টেমে ঘটে।
lutaoact

আমি এটি কখনই ভাবতে পারিনি, অন্তত স্বজ্ঞাতভাবে না! ধন্যবাদ
নবীন অত্রি

আমার ইস্যুটি এটাই ছিল। আমি যদিও কখনও নামের আপার নাম রাখার কারণে কোনও সমস্যা হতে পারে না।
সন্দীপ সুবেদী

এটা আমার জন্য একই ছিল। সমস্ত
শৈল

50

ইউনিট পরীক্ষার সময় আমার এই সমস্যাটি ছিল।

প্রথমবার আপনি যখন মডেল তৈরির ফাংশনটি কল করবেন, মঙ্গুজ আপনার সরবরাহিত কীটির (যেমন 'ব্যবহারকারী') এর অধীনে মডেলটিকে সঞ্চয় করে। আপনি যদি একাধিকবার একই কী দিয়ে মডেল তৈরির ফাংশনটি কল করেন তবে মঙ্গুজ আপনাকে বিদ্যমান মডেলটি ওভাররাইট করতে দেয় না।

মডেলটি ইতিমধ্যে মঙ্গুজে উপস্থিত রয়েছে কিনা তা আপনি পরীক্ষা করতে পারেন:

let users = mongoose.model('users')

মডেলটি উপস্থিত না থাকলে এটি ত্রুটি ছুঁড়ে ফেলবে, তাই আপনি মডেলটি পেতে, বা এটি তৈরি করতে চেষ্টা / ক্যাপচারে এটি মোড়ানো করতে পারেন:

let users
try {
  users = mongoose.model('users')
} catch (error) {
  users = mongoose.model('users', <UsersSchema...>)
}

1
আমার স্কিমার সংজ্ঞা দেওয়ার আগে আমার যেখানে একই সমস্যা ছিল সেখানে প্লাগিনের জন্য কিছু কনফিগারেশন সেটআপ করা দরকার। এটি মোটেও মোটেও ভাল খেলেনি এবং শেষ পর্যন্ত আমি হাল ছেড়ে দিয়েছি এবং এই চেষ্টা ধরার পদ্ধতির সাথে গিয়েছিলাম
ভিক্টর পারমার

আমি একই তবে অন্যান্য উপায়ে ব্যবহার করছি, এটি দুষ্ট:try exports.getModel = ()-> mongoose.model('User', userSchema) catch err exports.getModel = ()-> mongoose.model('User')
অ্যান্ডি গিগা

ধন্যবাদ স্যার, এই সমস্যাটিতে 5+ ঘন্টা নষ্ট করেছেন। আমি নোড সার্ভারের বিপরীতে সার্ভারলেস নিয়ে কাজ করছিলাম যা আমি অভ্যস্ত।
mxdi9i7

43

পরীক্ষাগুলি দেখার সময় আমার এই সমস্যাটি ছিল। যখন পরীক্ষাগুলি সম্পাদনা করা হয়েছিল, ঘড়িটি আবার পরীক্ষাগুলি চালিয়েছিল, তবে তারা এই কারণেই ব্যর্থ হয়েছিল।

মডেলটি উপস্থিত রয়েছে কিনা তা যাচাই করে আমি এটি ঠিক করেছি তবে এটি ব্যবহার করুন, অন্যথায় এটি তৈরি করুন।

import mongoose from 'mongoose';
import user from './schemas/user';

export const User = mongoose.models.User || mongoose.model('User', user);

এটি আমার পক্ষে কাজ করেছে। আমি বদলে গেছে module.export = Userকরার export defaults User। আমি refsঅন্যান্য মডেল থেকে ব্যবহারকারী ছিল । আমি নিশ্চিত নই কেন থেকে পরিবর্তন module.exportsকরতে export defaultএই সমস্যাটি নিয়ে আসে। তবুও, এই উত্তরটি এটি স্থির করেছে বলে মনে হচ্ছে।
রানিয়াস

3
খারাপ mongoose.modelsবিদ্যমান নয়, অন্তত সাম্প্রতিক সংস্করণে
পেড্রো লূস

1
আমার একই সমস্যা ছিল তবে এটি সমস্ত পরীক্ষার আগে সমস্ত মডেল সাফ করার সাথে সংশোধন করেছিলাম:for (let model in mongoose.models) delete mongoose.models[model]
ই সুন্দিন

আমার পরীক্ষার স্ক্রিপ্টটি দেখতে "test": "NODE_ENV=test mocha --file mocha.config.js --watch"তেমন দেখাচ্ছে: এবং সেই কনফিগারেশন জেএস ফাইলটিতে আমার একটি আছে before()এবং after()সেটআপ এবং টিয়ারডাউন পরিচালনা করতে। @ E.Sundin এখানে নিখুঁত সমাধান সরবরাহ করেছে এবং এটি একটি কবজির মতো কাজ করে। ধন্যবাদ!
ব্র্যান্ডন আসকভ

21

আমি এই সমস্যাটি অনুভব করছি এবং এটি স্কিমা সংজ্ঞাগুলির কারণে নয় বরং সার্ভারলেস অফলাইন মোডের কারণে হয়েছিল - আমি কেবল এটি দিয়ে এটি সমাধান করতে পেরেছি:

serverless offline --skipCacheInvalidation

যার এখানে উল্লেখ করা হয়েছে https://github.com/dherault/serverless-offline/issues/258

আশা করি এটি সার্ভারলেস এবং অফলাইন মোডে চলমান তাদের প্রকল্পটি তৈরি করা অন্য কাউকে সহায়তা করে।


2
খুব উপকারী. ধন্যবাদ।
থানহ ট্রুং

2
আমি ক্যাশে অবৈধতা, ধ্রুবক পুনরায় module.exports = mongoose.models.Users || mongoose.model('Users', UsersSchema);
লোডগুলি এড়িয়ে চলা

তুমি আমার দিনটিকে মধুর
fstasi

অসংখ্য ধন্যবাদ!
অ্যান্ডিফাইজান

এটি খুব সহায়ক ছিল। ধন্যবাদ!
ifiok

20

আপনি যদি সার্ভারলেস অফলাইন ব্যবহার করছেন এবং ব্যবহার করতে চান না --skipCacheInvalidation , আপনি খুব ভাল ব্যবহার করতে পারেন:

module.exports = mongoose.models.Users || mongoose.model('Users', UsersSchema);

আপনি যদি অন্য মডেলটির ভিতরে অন্য মডেলটি আমদানি করেন তবে আপনাকে এটিও অবশ্যই ব্যবহার করতে হবে--skipCacheInvalidation
পাউডাহাম

1
নেক্সট.জেএস-তে ব্যবহারের জন্য এটি আমি সঠিক উত্তরটি খুঁজছিলাম is আমার ইচ্ছা এই পৃষ্ঠায় উচ্চতর ছিল!
ব্রেন্ডন নী

18

আপনি যদি এটি এখানে তৈরি করেন তবে আমারও একই সমস্যা হতে পারে। আমার সমস্যাটি ছিল আমি একই নামের সাথে অন্য একটি মডেল সংজ্ঞায়িত করছি । আমি আমার গ্যালারী এবং আমার ফাইল মডেলকে "ফাইল" বলি। আপনি কপি এবং পেস্ট করুন!


11

আমি যখন এটি লিখি তখন আমার সাথে এটি ঘটেছিল:

import User from '../myuser/User.js';

তবে, আসল পথটি হ'ল '../myUser/User.js'


আমদানি করার সময় স্কিমা পাথগুলির মিশ্রণের ক্ষেত্রে এই সমস্যা দেখা দেয় - স্কিমার আমদানি করে সমস্ত ফাইল একই ক্ষেত্রে ব্যবহার করে তা পরীক্ষা করে দেখুন।
অ্যান্ড্রু কুপার

এটি আমাদের বাঁচায়! উইন্ডোজ ব্যবহারের কারণে এটি হতে পারে বলে আমাদের একটি অনুভূতি রয়েছে
লিকা

11

আমি যোগ করে এটি সমাধান

mongoose.models = {}

লাইনের আগে:

mongoose.model(<MODEL_NAME>, <MODEL_SCHEMA>)

আশা করি এটি আপনার সমস্যার সমাধান করে


এটিই আমি করেছি এবং এটি এটি স্থির করেছিল। mongoose.connection.models = {};
ভাগ্য

6

এই চেকটি সমাধান করতে মডেলটি তৈরি করার আগে উপস্থিত রয়েছে কিনা:

if (!mongoose.models[entityDBName]) {
  return mongoose.model(entityDBName, entitySchema);
}
else {
  return mongoose.models[entityDBName];
}

4

আমি জানি একটি গ্রহণযোগ্য সমাধান আছে তবে আমি অনুভব করি যে বর্তমান সমাধানটি প্রচুর পরিমাণে বয়লারপ্লেটে ফলস্বরূপ ফলস্বরূপ যাতে আপনি মডেলগুলি পরীক্ষা করতে পারেন। আমার সমাধানটি আপনাকে মূলত মডেলটি গ্রহণ এবং এটি কোনও ফাংশনের ভিতরে রাখার ফলে নতুন মডেলটিকে যদি মডেলটি নিবন্ধিত না হয় তবে ফিরে আসে এবং যদি তা থাকে তবে এটি বিদ্যমান মডেলটিকে ফিরিয়ে দেয় in

function getDemo () {
  // Create your Schema
  const DemoSchema = new mongoose.Schema({
    name: String,
    email: String
  }, {
    collection: 'demo'
  })
  // Check to see if the model has been registered with mongoose
  // if it exists return that model
  if (mongoose.models && mongoose.models.Demo) return mongoose.models.Demo
  // if no current model exists register and return new model
  return mongoose.model('Demo', DemoSchema)
}

export const Demo = getDemo()

সমস্ত জায়গার সংযোগ খোলা এবং বন্ধ করা হতাশাজনক এবং ভালভাবে সংকোচিত হয় না।

এইভাবে যদি আমার পরীক্ষাগুলিতে মডেলটির জন্য দুটি আলাদা জায়গা বা আরও বিশেষত প্রয়োজন হয় তবে আমি ত্রুটিগুলি পাব না এবং সমস্ত সঠিক তথ্য ফিরিয়ে দেওয়া হচ্ছে।



1
If you want to overwrite the existing class for different collection using typescript
then you have to inherit the existing class from different class.

export class User extends Typegoose{
  @prop
  username?:string
  password?:string
}


export class newUser extends User{
    constructor() {
        super();
    }
}

export const UserModel = new User ().getModelForClass(User , { schemaOptions: { collection: "collection1" } });

export const newUserModel = new newUser ().getModelForClass(newUser , { schemaOptions: { collection: "collection2" } });

1

আমার একই সমস্যা ছিল, কারণ আমি জেএস ফাংশনে স্কিমাকে একটি মডেল হিসাবে সংজ্ঞায়িত করেছি, সেগুলি কোনও ফাংশনে নয়, নোড মডিউলে বিশ্বব্যাপী সংজ্ঞায়িত করা উচিত।


1

এই ত্রুটি নিক্ষেপ করার আরও একটি উপায় আছে।

মনে রাখবেন যে মডেলটির পথটি সংবেদনশীল।

"বিভাগ" মডেলটির সাথে জড়িত এই একই উদাহরণে ত্রুটিটি এই শর্তগুলির মধ্যে ফেলে দেওয়া হয়েছিল:

1) প্রয়োজনীয় বিবৃতিটি দুটি ফাইলে উল্লেখ করা হয়েছিল: ..category.js এবং ..index.js 2) আমি প্রথম, কেসটি সঠিক ছিল, দ্বিতীয় ফাইলটিতে এটি নীচে ছিল না:

category.js

এখানে চিত্র বর্ণনা লিখুন

index.js

এখানে চিত্র বর্ণনা লিখুন


0

সংগ্রহের জন্য স্কিমা সংজ্ঞাটি অনন্য হওয়া উচিত, এটি সংগ্রহের জন্য একের পরে এক স্কিমা হওয়া উচিত নয়।


0

কারণ আপনার স্কিমা ইতিমধ্যে, নতুন স্কিমা তৈরির আগে বৈধতা দিন।

var mongoose = require('mongoose');
module.exports = function () {
var db = require("../libs/db-connection")();
//schema de mongoose
var Schema = require("mongoose").Schema;

var Task = Schema({
    field1: String,
    field2: String,
    field3: Number,
    field4: Boolean,
    field5: Date
})

if(mongoose.models && mongoose.models.tasks) return mongoose.models.tasks;

return mongoose.model('tasks', Task);

0

আপনি সহজেই এটির মাধ্যমে সমাধান করতে পারেন

delete mongoose.connection.models['users'];
const usersSchema = mongoose.Schema({...});
export default mongoose.model('users', usersSchema);

0

আমার এমন একটি পরিস্থিতি রয়েছে যেখানে প্রতিটি অনুরোধের সাথে আমাকে গতিশীলভাবে মডেলটি তৈরি করতে হবে এবং যার কারণে আমি এই ত্রুটিটি পেয়েছি তবে যাইহোক, আমি এটি ঠিক করার জন্য যা ব্যবহার করেছি তা হ'ল নীচের মতো মুছে ফেলা পদ্ধতি ব্যবহার করুন :

var contentType = 'Product'

var contentSchema = new mongoose.Schema(schema, virtuals);

var model = mongoose.model(contentType, contentSchema);

mongoose.deleteModel(contentType);

আমি আশা করি এটি যে কাউকে সহায়তা করতে পারে।


0
The reason of this issue is: 

you given the model name "users" in the line 
<<<var user = mongoose.model('users' {>>> in check.js file

and again the same model name you are giving in the insert file
<<< var user = mongoose.model('users',{ >>> in insert.js

This "users" name shouldn't be same when you declare a model that should be different 
in a same project.

0

সমস্ত লোক এখানে একটি মিশ্রণ সঙ্গে একটি কোডবেস কারণে বিভক্তি জন্য Typegoose এবং নকুল :

প্রত্যেকের জন্য একটি ডিবি সংযোগ তৈরি করুন:

মঙ্গুজ:

module.exports = db_mongoose.model("Car", CarSchema);

টাইপগুজ:

db_typegoose.model("Car", CarModel.schema, "cars");

0

আমার কেবল পেস্ট করার একটি ভুল কপি আছে। অন্য লাইনে আমার এক লাইনে একই নাম ছিল (বিজ্ঞাপন মডেল):

const Admin = mongoose.model('Ad', adminSchema);

সঠিক:

const Admin = mongoose.model('Admin', adminSchema);

যাইহোক, কারও কাছে যদি "স্ব-সংরক্ষণ" থাকে, এবং এই জাতীয় প্রশ্নের জন্য সূচক ব্যবহার করুন:

**adSchema**.index({title:"text", description:"text", phone:"text", reference:"text"})

এটি সূচক মুছে ফেলতে হবে, এবং সঠিক মডেলের জন্য পুনরায় লিখতে হবে:

**adminSchema**.index({title:"text", description:"text", phone:"text", reference:"text"})

0

এটি করে আমি এই সমস্যাটি সমাধান করেছি

// Created Schema - Users
// models/Users.js
const mongoose = require("mongoose");

const Schema = mongoose.Schema;

export const userSchema = new Schema({
  // ...
});

তারপরে অন্যান্য ফাইলগুলিতে

// Another file
// index.js
import { userSchema } from "../models/Users";
const conn = mongoose.createConnection(process.env.CONNECTION_STRING, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
});
conn.models = {};
const Users = conn.model("Users", userSchema);
const results = await Users.find({});

আরও ভাল সমাধান

let User;
try {
  User = mongoose.model("User");
} catch {
  User = mongoose.model("User", userSchema);
}

আশা করি এটা কাজে লাগবে...


কোনও ব্যাখ্যা নেই কেন এটি ব্যাখ্যা সরবরাহ করা এত কঠিন। প্রত্যেকে আপনার কোডের মাধ্যমে পড়তে পড়তে আপনি যে সময় নষ্ট করছেন তা কল্পনা করুন।
রবার্টফোনিক্স

-1

যেহেতু এই সমস্যাটি ঘটেছে কারণ মডেলকে কল করার জন্য। ক্যাচ ব্লকে চেষ্টা করে আপনার মডেল কোডটি মুড়িয়ে এই সমস্যাটি ঘিরে কাজ করুন। টাইপসক্রিপ্ট কোড এর মত -

         Import {Schema, model} from 'mongoose';
         export function user(){
              try{
                   return model('user', new Schema ({
                            FirstName: String,
                            Last name: String
                     }));
              }
             catch{
                   return model('user');
              }
         }

একইভাবে আপনি js তেও কোড লিখতে পারেন।


-2

আপনি চেক.জেএস এবং ইনসার্ট.জেজে একই ভেরিয়েবল নামের "ব্যবহারকারী" এর সাথে মঙ্গুজ.মডেল ব্যবহার করছেন।


-4

আপনি যদি এক্সপ্রেসগুলি নিয়ে কাজ করছেন তবে আপনার মডেল সংজ্ঞাটি অ্যাপ.জেটের বাইরে সরিয়ে নেওয়া দরকার হতে পারে (তাই) স্ক্রিপ্টটি ইনস্ট্যান্ট করা হলে এটি কেবল একবার বলা হয় when


এটির কোনও অর্থ হয় না, নামকরণের ক্ষেত্রে কোনও সমস্যা না হলে মঙ্গুজের মডেলগুলি একবারে সংজ্ঞায়িত করা হয় (উদাহরণস্বরূপ কেস), একবার যখন এটি প্রথমে বলা হয় এটি আরম্ভ করা হয়, ভবিষ্যতের প্রয়োজন কেবল উদাহরণটি পাওয়া উচিত এবং এটি পুনরায় প্রতিষ্ঠিত করা উচিত নয়
জনি

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