2017-11-20 10 views
0

私は異なるサブ文書の配列を持つことができる文書を持っています。MongoDB - 異なるタイプの配列を更新する(discriminatorKey)

文書をデータベースに保存すると、正常に機能し、構造が正確に必要なものになります。

req.body has the following value: 
{ key: 'title', 
    value: 'Test', 
    unique_site_id: '_jxn7vw' } 

    const Site = require('../../models/site'); 

    exports.update = async function(req, res, next) { 
     console.log(req.body); 
     if (req.body.unique_site_id) { 
     Site.update(
      { 
      unique_id: req.body.unique_site_id, 
      _user: req.user.id, 
      'sections.type': 'header' 
      }, 
      { 
      $set: { 
       ['sections.$.' + req.body.key]: req.body.value 
      } 
      }, 
      function(err, status) { 
      if (err) { 
       console.log(err); 
       return res.status(500).send(); 
      } 
      console.log(status); 
      return res.status(200).send(); 
      } 
     ); 
     } 
    }; 

常にconsole.log(status)プリント:{ ok: 0, n: 0, nModified: 0 }

私の問題は、私は、 "セクション" の配列に(以下スキーマ)

const mongoose = require('mongoose'); 
const Schema = mongoose.Schema; 
const logoSchema = require('./site-sections/logo'); 

var sectionSchema = new Schema(
    { 
    show: { type: Boolean, default: true }, 
    order: Number 
    }, 
    { discriminatorKey: 'type' } 
); 

const siteSchema = new Schema({ 
    _user: { type: Schema.Types.ObjectId, ref: 'User' }, 
    type: { type: String, required: true }, 
    title: { type: String, default: '' }, 
    name: { type: String, required: true }, 
    password: { type: String, default: '' }, 
    caching: { type: Number, default: 1 }, 
    unique_id: { type: String, required: true }, 
    sections: [sectionSchema] 
}); 

const sectionArray = siteSchema.path('sections'); 

const headerSchema = new Schema({ 
    image: { type: String, default: '' }, 
    title: { type: String, default: '' }, 
    sub_title: { type: String, default: '' }, 
    show: { type: Boolean, default: true }, 
    logo: logoSchema 
}); 

sectionArray.discriminator('header', headerSchema); 

const textSchema = new Schema({ 
    text: String 
}); 

sectionArray.discriminator('text', textSchema); 

module.exports = mongoose.model('site', siteSchema); 

マイUpdate関数を値を更新することができないということです。

タイトル値を更新するにはどうすればよいですか?

+0

弁別者は更新できないようですか? https://github.com/Automattic/mongoose/issues/4387 –

答えて

0

ディスクリミネータキーは更新できません。 https://github.com/Automattic/mongoose/issues/3839

だから、右の順序は次のとおりです。

  1. コンバートマングース文書が
  2. 保存水和物()
  3. とマングース文書に戻って変換する他のプロパティを/ toObject()
  4. 変更弁別器、および変更したオブジェクトを削除します
関連する問題