Mongoose: استخدام Lean للتوفير؟

تم إنشاؤها على ٣ أكتوبر ٢٠١٣  ·  16تعليقات  ·  مصدر: Automattic/mongoose

أرغب في استخدام خيار lean بالنسبة للحفظ.
إرجاع نداء الحفظ يعود أيضًا إلى مستند نمس وليس كائن JS الذي أريد تغييره باستخدام مكالمة تشبه الهزيل.

يبدو استخدام lean للاستعلامات و toObject في وظائف رد الاتصال المحفوظة بمثابة إرباك بالنسبة لي.

أيه أفكار؟

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

imrefazekas ، حفظ ، تحديث ، إنشاء ، وإزالة ليست "استعلامات" ، لذا فهي لا تأخذ التوجيه .lean() كما هو.
يمكنك استخدام التابع .toObject() على الكائن الذي تم إرجاعه للحصول عليه بدون مخطط قاعدة البيانات:

p.save(function (err, returned) {
  var leanObject = returned.toObject(); // has many options: http://mongoosejs.com/docs/api.html#document_Document-toObject
  assert.equal(leanObject.schema, null);
});

ال 16 كومينتر

إذا كنت لا تريد استخدام lean ، فإن أفضل رهان لك هو تكوين كائن جديد من كائن Mongoose الذي تم إرجاعه

Person.findOne({
    _id: req.user.id
}, function(err, result) {
    if (err)
        return next(err);

    return (200, {
        id: result._id,
        spouse: result.spouse,
        children: result.children
    });
});

ربما كان منشوري غير واضح ، آسف.
أرغب في استخدام العجاف ولكن في توفير العمليات أيضًا.
عمليات الاسترجاعات لوظائف الحفظ مثل "save" أو "update" تعود مع كائن المخطط ولا يمكنني استخدام lean للحصول على كائن JS خالص.
هذه مشكلتي. أود استخدام lean للحفظ والتحديث أيضًا.

imrefazekas ، حفظ ، تحديث ، إنشاء ، وإزالة ليست "استعلامات" ، لذا فهي لا تأخذ التوجيه .lean() كما هو.
يمكنك استخدام التابع .toObject() على الكائن الذي تم إرجاعه للحصول عليه بدون مخطط قاعدة البيانات:

p.save(function (err, returned) {
  var leanObject = returned.toObject(); // has many options: http://mongoosejs.com/docs/api.html#document_Document-toObject
  assert.equal(leanObject.schema, null);
});

دندنة الهمتي ... هل يجب أن يكون لدى save() خيارًا بسيطًا؟

كيف تتخيل توفير () والعمل معًا؟ AFAIK هذا لا معنى له.

أممم ، لقد مرت بضعة أيام ولكن الأمر كذلك حاليًا

user.save(function(err,user){

      //user is full-fledged etc
});

مع الخيار الهزيل ، سيكون / يمكن أن يكون

user.save({
  lean:true
},function(err,user){

      //user is *not* full-fledged etc
});

أليس هذا صحيحا؟

ORESoftware كلا ، لأن المعامل الثاني في رد الاتصال للحفظ هو نفس المستند بالضبط. لا يطلب Mongoose قاعدة البيانات للمستند المحدث حديثًا. على سبيل المثال،

user.save(function(err, _user){
  user === _user; // true
});

حسنًا ، حصلت عليه :) سيئتي

للسجل ، الحل المقدم أعلاه من refack لا يزال يعمل مثل السحر في عام 2017

peterpeterparker لا أوافق وأعتقد أن هذا لا يزال يمثل مشكلة للمستخدمين الذين يريدون إرجاع البيانات من جميع عمليات قاعدة البيانات بدلاً من مثيلات Mongoose.

@ alex-dixon كنت أشير للتو إلى أن حل refack لعملية save لا يزال صالحًا وعمليًا في عام 2017 ، لا أكثر ولا أقل ؛)

@ peterpeterparker أنت على حق. آسف. لا ينبغي أن يوجه ذلك نحوك.

@ alex-dixon لا تقلق

هل يجب استخدام lean() مع Model.create() ؟

أبدًا لأنك لا تستطيع استخدام lean() مع Model.create() : p

فهمتك :)

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