মঙ্গুজে অন্য একটি স্কিমা উল্লেখ করে


104

আমার যদি দুটি স্কিমার মত থাকে:

var userSchema = new Schema({
    twittername: String,
    twitterID: Number,
    displayName: String,
    profilePic: String,
});

var  User = mongoose.model('User') 

var postSchema = new Schema({
    name: String,
    postedBy: User,  //User Model Type
    dateCreated: Date,
    comments: [{body:"string", by: mongoose.Schema.Types.ObjectId}],
});

আমি তাদের উপরের উদাহরণের মতো একত্রে সংযুক্ত করার চেষ্টা করেছি তবে কীভাবে এটি করব তা আমি বুঝতে পারি না। অবশেষে, আমি যদি এটির মতো কিছু করতে পারি তবে এটি আমার জীবনকে খুব সহজ করে তুলবে

var profilePic = Post.postedBy.profilePic

উত্তর:


182

দেখে মনে হচ্ছে পপুলেট পদ্ধতিটি আপনার সন্ধান করছেন। প্রথমে আপনার পোস্টের স্কিমাতে ছোট পরিবর্তন করুন:

var postSchema = new Schema({
    name: String,
    postedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
    dateCreated: Date,
    comments: [{body:"string", by: mongoose.Schema.Types.ObjectId}],
});

তারপরে আপনার মডেলটি তৈরি করুন:

var Post = mongoose.model('Post', postSchema);

তারপরে, আপনি যখন আপনার ক্যোয়ারী করবেন তখন আপনি এই জাতীয় উল্লেখগুলি তৈরি করতে পারেন:

Post.findOne({_id: 123})
.populate('postedBy')
.exec(function(err, post) {
    // do stuff with post
});

4
"রেফ" ক্ষেত্রটি কীসের জন্য? আমি এটিতে দলিল খুঁজে পাচ্ছি না।
কে - এসওতে বিষক্রিয়া বাড়ছে।

3
@ কার্লমরিসন রেফ ফিল্ডের অর্থ হ'ল যে সংকলনে উল্লিখিত আইডি অনুসন্ধান করা হবে।
অঙ্কুর ভার্মা

পপুলেট এবং অ্যাডটোসেটের মধ্যে পার্থক্য কী হবে?
Winnemucca

1
by:সিলেক্টোর জন্য রেফারেন্স কোথায়
মুহাম্মদ উমর

1
"সুত্র" জন্য ডক্স @KarlMorrison জন্য দস্তাবেজে সমাহিত করা হয় populate: mongoosejs.com/docs/populate.html
জেফ্রি মার্টিনেজ

19

সংযোজন: কেউ "জনসংখ্যা" উল্লেখ করেনি --- এটি আপনার সময় এবং অর্থের মূল্য মঙ্গুজেস পপুলেট পদ্ধতিটির দিকে তাকিয়ে থাকে: এছাড়াও ক্রস ডকুমেন্টস রেফারেন্সিংয়ের ব্যাখ্যা দেয়

http://mongoosejs.com/docs/populate.html


1

দেরী উত্তর কিন্তু যোগ নকুল এছাড়াও ধারণা আছে যে Subdocuments

এই বাক্য গঠন দিয়ে, userSchemaআপনার নিজের postSchemaমতো আপনার টাইপ হিসাবে উল্লেখ করতে সক্ষম হওয়া উচিত :

var userSchema = new Schema({
    twittername: String,
    twitterID: Number,
    displayName: String,
    profilePic: String,
});

var postSchema = new Schema({
    name: String,
    postedBy: userSchema,
    dateCreated: Date,
    comments: [{body:"string", by: mongoose.Schema.Types.ObjectId}],
});

postedByপ্রকার সহ আপডেট হওয়া ক্ষেত্রটি নোট করুন userSchema

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

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