Mongoose: المستندات المضمنة في الكائن مع مفاتيح عشوائية؟

تم إنشاؤها على ١٢ يناير ٢٠١٢  ·  40تعليقات  ·  مصدر: Automattic/mongoose

هل هناك طريقة لاستخدام المستندات المضمنة داخل كائن ليس له مفاتيح محددة مسبقًا؟ على سبيل المثال ، بدلاً من وجود مثل هذا الموقف:

var myschema = new mongoose.Schema({
   field : { foo: String, bar: String }
});

القدرة على قول شيء مثل:

var myschema = new mongoose.Schema({
   field : { *: String }
});

يجعلها مصفوفة أكثر قليلاً بهذه الطريقة - لكن الفكرة هي أنني لا أعرف المفاتيح مسبقًا ، لكني ما زلت أرغب في الحصول على مستند مضمّن.

enhancement

التعليق الأكثر فائدة

هذه الميزة ضرورية.

ال 40 كومينتر

لا يوجد.

ماذا عن Mixed type؟

aheckmann - هذا ما كنت أخشاه ، هل تعرف ما إذا كان هذا على خريطة الطريق أو إذا كان هذا مجرد شيء ليس مطلوبًا على نطاق واسع؟

TooTallNate - صحيح ، هذا هو الإعداد الافتراضي. تكمن المشكلة في الاختلاط ، حيث تفقد جميع عناصر التحقق من الصحة / المخطط التي تحصل عليها من خلال المستندات المضمنة (المفاتيح والمصفوفات المسماة) المدعومة.

ordrin لا أحد يحتاج إليها من قبل

حسنًا ، لم أدرك أنني كنت أفعل شيئًا مقصورًا على فئة معينة! اللعنة.

لدي حالة استخدام لهذا ، على الأقل أعتقد أنه مناسب.

أنا أصنع نظام ACL.

تحتوي المهام الخاصة بي على _ids وهي عبارة عن سلاسل.

أريد تضمين هذه المعرفات في سجلات الأعضاء الخاصة بي (مجموعة من المهام التي يمكنهم القيام بها).

بينما يمكنني بالطبع وضع مجموعة من السلاسل في خاصية "المهام" الخاصة بهم ، إلا أنني أفضل استخدام DBrefs في هذا السيناريو حتى أتمكن من سحب البيانات الوصفية.

ordrin أنا فقط أعد قراءة هذا. هل نظرت إلى استخدام مختلط؟ ربما أساءت فهم طريقة تفكير b / ci في "المستندات المضمنة" بشكل مختلف عن الطريقة التي يشير بها MongoDB إليها. إليك بشكل عام ما يمكنك فعله باستخدام Mixed.

var myschema = new mongoose.Schema({
   field : mongoose.Schema.Types.Mixed
});

هذا قريب جدًا مما طلبته. في هذه الحالة ، يمكن تخصيص "الحقل" لأي قيمة مهما كانت. يمكنك فقط تخصيص كائن حرفي وإضافة مدقق مخصص للتأكد من أن القيم عبارة عن سلاسل.

myschema.path('field').validate(yourCustomValidator, 'your custom vaildator failed msg');

function yourCustomValidator (value) {
  // check that value is an object etc
  return true|false
}

var M = mongoose.model('M', myschema);
var m = new M;
m.field = { might: "work", for: "you" }
m.save();

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

أردت فقط أن أضيف أنني كنت أبحث عن وظائف مماثلة لهذا. كنت أرغب في الحصول على مفاتيح ديناميكية بقيم مخطط مكتوبة بقوة. سيكون من الرائع لو تمكنا من تجنب الاضطرار إلى إجراء عملية التحقق من الصحة.

new mongoose.Schema({
    dynamicKey: {foo: Number, isAwesome: Boolean}
});

or 

new mongoose.Schema({
    dynamicKey: value is always only a Number
});

+1

+1

+1.

لقد نشرت منشور SO بخصوص هذه المسألة. إذا كان أي شخص يعرف طريقة جيدة للتحقق من صحة الممتلكات باستخدام المفاتيح الديناميكية ، فلا تتردد في النشر.

إذا كان مدمجًا ، فقد أقوم بتخطيط مخطط مثل

new Schema({
  myDynamicKeyObj: {
    type: Dynamic, 
    key: {type: String, match: /[a-z]*/i}, 
    val: [String] 
  } 
})

+1

سيكون من الرائع أن يكون لديك مفاتيح ديناميكية. إذا كنت تريد كتابة مخطط json ، فيمكنك القيام بشيء مثل لمطابقة مفتاح عدد صحيح على سبيل المثال:

"^[0-9]+$": {
    "$ref": "#/definitions/mydefinition"
}

أي حل به مفاتيح ديناميكية أم لا؟
مثال على كائنين:
{ 123: { firstname: "firstA", lastname: "lastA" } }
{ 124: { firstname: "firstB", lastname: "lastB" } }

نفس المشكلة. أريد إجراء تحليلات كما هو موضح في مستندات mongodb. http://docs.mongodb.org/ecosystem/use-cases/pre-aggregated-reports/

+1

: +1:

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

لقد احتجت هذا جيدا

+1

أوقف عمليات +1 التي لا معنى لها والتي تنتهي بمشاهدة البريد الوارد للأشخاص.

هناك أزرار "اشتراك" و "رد فعل" لسبب ما.

+1

qqilihq ، نفذ plx ، ثم نتوقف +1 ، kthxbye

"لم يحتاجها أحد من قبل"
بعد 5 سنوات ، تم إجراء الكثير من إجراءات 1+ ، وما زلت لا توجد تحديثات على هذا؟

نظرًا لأن هذه هي أقدم مشكلة يمكنني العثور عليها تتعلق بهذه المشكلة ، فسأعيد فتحها وأغلق # 1522 حتى يتمكن أكبر عدد ممكن من الأشخاص من تتبع التحديثات.

هذه الميزة ضرورية.

كيف تم إطلاق هذه الميزة بهدوء لدرجة أنني لم أكن على علم بها ؟! 💯

تضمين التغريدة أين تبحث عن تحديثات ميزة النمس؟ التغيير؟ تويتر؟

سجل التغيير عادة ، ولكن لا بد أنه فاته هذا!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات