সাব ডকুমেন্ট অ্যারে আইটেমগুলির জন্য _id সম্পত্তি তৈরি থেকে মঙ্গুজকে থামান


227

আপনার যদি সাব-ডকুমেন্ট অ্যারে থাকে তবে মঙ্গুজ স্বয়ংক্রিয়ভাবে প্রতিটিটির জন্য আইডি তৈরি করে। উদাহরণ:

{
    _id: "mainId"
    subDocArray: [
      {
        _id: "unwantedId",
        field: "value"
      },
      {
        _id: "unwantedId",
        field: "value"
      }
    ]
}

কোন অ্যারের মধ্যে অবজেক্টগুলির জন্য আইডি তৈরি না করার জন্য মঙ্গুজকে বলার উপায় আছে কি?

উত্তর:


288

এটি সহজ, আপনি সাবস্কেমাতে এটি সংজ্ঞায়িত করতে পারেন:

var mongoose = require("mongoose");

var subSchema = mongoose.Schema({
    //your subschema content
},{ _id : false });

var schema = mongoose.Schema({
    // schema content
    subSchemaCollection : [subSchema]
});

var model = mongoose.model('tablename', schema);

2
_idসাবস্কেমা সংগ্রহের ক্ষেত্রেও কেবল এই ক্ষেত্রগুলি এড়িয়ে যাবে , বা কেবল সেই ক্ষেত্রে যেখানে সাবস্কেমা সাব-ডকুমেন্ট আইটেমগুলির অ্যারে হিসাবে এম্বেড করার জন্য ব্যবহৃত হচ্ছে? বিশেষ করে আজ আমার নিজের প্রশ্নটির কারণে আমি এটি জিজ্ঞাসা করছি ।
ওয়েব ব্যবহারকারী

1
আমি নেস্টেড সাব-স্কিমা সংগ্রহের দুটি স্তর ব্যবহার করি। অন্য কথায়, আমার কাছে আপনার উদাহরণের মতো একটি সাবস্কিমা সংগ্রহ রয়েছে। এর মধ্যে, আমি অন্য একটি পৃথক সাব-স্কিমা সংগ্রহ ব্যবহার করি। আমি কেবল প্রথম স্তরের সাব-স্কিমা মডেল উদাহরণগুলি আইডি না ব্যবহার করতে চাই, তবে দ্বিতীয় স্তরের (নেস্টেড) সাব-স্কিমা মডেল উদাহরণগুলির আইডি থাকা দরকার। আমি যখন আপনার সমাধানটি ব্যবহার করি, এটি নির্দিষ্ট করে { _id: false }, সাব-স্কিমার উভয় স্তরই আইডি ছাড়াই। এই আচরণটি ঘিরে কাজ করার কোনও উপায়?
ওয়েব ব্যবহারকারী

1
আপনি কি তৃতীয় স্তরের সেট করার চেষ্টা করেছেন { _id : true }?
throrin19

: কি আমি গতকাল চেষ্টা এটি পরিবর্তন ছিল let studentSchema = new Schema({ studentId: { type: ObjectId, ref: Student.modelName }, performance: [performanceSchema] }, { _id: false });এই: let studentSchema = new Schema({ _id: false, id: false, studentId: { type: ObjectId, ref: Student.modelName }, performance: [performanceSchema] });এবং যে বন্ধ _idউপর সৃষ্টি studentSchemaকিন্তু অপরিবর্তিত রাখা _idবস্তু উপর সৃষ্টি performanceউপ-নথি অ্যারে। উভয় _id: falseএবং id: falseপ্রয়োজনীয় কিনা তা নিশ্চিত নয় ।
ওয়েব ব্যবহারকারী

ধন্যবাদ, আমার জন্য সেরা উপায়।
সীতবজ্জা হাজরা

128

আপনি স্কিমা ছাড়াই উপ-নথি তৈরি করতে এবং এড়াতে পারেন _id। কেবলমাত্র _id:falseআপনার সাবডকুমেন্ট ঘোষণায় যুক্ত করুন।

var schema = new mongoose.Schema({
   field1:{
      type:String
   },
   subdocArray:[{
      _id:false,
      field :{type:String}
   }]
});

এটি _idআপনার সাবডকে ক্ষেত্র তৈরি করতে বাধা দেবে।

মঙ্গুসে পরীক্ষিত v5.9.10


42

অতিরিক্তভাবে, আপনি যদি কোনও সাব-স্কিমা নির্দিষ্ট করার জন্য কোনও বস্তুর আক্ষরিক বাক্য গঠন ব্যবহার করেন তবে _id: falseআপনি এটিতে চাপ দেওয়ার জন্য যুক্ত করতে পারেন।

{
   sub: {
      property1: String,
      property2: String,
      _id: false
   }
}

26

আমি মঙ্গুজ ৪.6.৩ ব্যবহার করছি এবং আমাকে যা করতে হবে তা ছিল _ আইডি: স্কিমাতে মিথ্যা, সাবস্কিমা করার দরকার নেই।

{
    _id: ObjectId
    subDocArray: [
      {
        _id: false,
        field: "String"
      }
    ]
}

পুরো সংগ্রহ জুড়ে অনন্য করার কোনও উপায় আছে কি?
সাইতামা

সম্ভবত এই পদ্ধতিটি দিয়ে নয়, তবে আপনি সর্বদা চেষ্টা করতে পারেন। _idসীমাবদ্ধতার চেয়ে ক্ষেত্র।
জিমিলোই

যদি সেই সাব-ডকুমেন্টটি তৈরি করার সময়, আমি স্পষ্টভাবে বরাদ্দ করি _id = mongoose.Types.ObjectId(), তাহলে কি সেই সংগ্রহটি অনন্য হয়ে উঠবে?
সাইতামা

কেবল একটি নতুন স্ট্যাক ওভারফ্লো খুলুন, এইভাবে আপনি অনেক লোককে একবারে উত্তর দিতে পারবেন ~
জিমিলোই

4

আপনি যে কোনও একটি ব্যবহার করতে পারেন

var subSchema = mongoose.Schema({
//subschema fields    

},{ _id : false });

অথবা

var subSchema = mongoose.Schema({
//subschema content
_id : false    

});

দ্বিতীয় বিকল্পটি ব্যবহার করার আগে আপনার মঙ্গুজ সংস্করণটি পরীক্ষা করে দেখুন


1

আপনি যদি পূর্বনির্ধারিত স্কিমা (_id সহ) সাব-ডকুমেন্ট হিসাবে (_id ছাড়া) ব্যবহার করতে চান, আপনি তত্ত্ব অনুসারে অনুসরণ করতে পারেন:

const sourceSchema = mongoose.Schema({
    key : value
})
const subSourceSchema = sourceSchema.clone().set('_id',false);

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

delete subSourceSchema.paths._id;

এখন আমি _id ছাড়া আমার পিতামাত্ত দস্তাবেজে সাবসোর্সচেমা অন্তর্ভুক্ত করতে পারি। আমি নিশ্চিত না এটি এটি করার পরিষ্কার উপায়, তবে এটি কার্যকর।

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