【问题标题】:How to loop items in mongoose schema如何在猫鼬模式中循环项目
【发布时间】:2022-02-14 21:21:15
【问题描述】:

我有猫鼬模式,我有语言模式。我想循环它们取决于我的其他语言模型。现在我有它们静态的(en,ru,ge)。

const StrategyTranslatedFieldsSchema = mongoose.Schema(
  {
    title: String,
    teaser: String
  },
  { _id : false }
)

const StrategySchema = mongoose.Schema({
    en: StrategyTranslatedFieldsSchema,
    ge: StrategyTranslatedFieldsSchema,
    ru: StrategyTranslatedFieldsSchema,
},
{
    timestamps: true 
});  

我的语言架构:

const languageSchema = mongoose.Schema({
    en:{
        type: String,
        default: 'en'
    },
    ru:{
        type: String,
        default: 'ru'
    },
    ge:{
        type: String,
        default: 'ge'
    },
}) 

想要这样的东西:

const mongoose = require('mongoose');
const slug = require('mongoose-slug-updater');
const Language = require('../models/Language')

mongoose.plugin(slug); 

const StrategyTranslatedFieldsSchema = mongoose.Schema(
  {
    title: String,
    teaser: String
  },
  { _id : false }
)

const StrategySchema = mongoose.Schema({
  slug: { 
    type: String, 
    slug: "en.title", 
    slugPaddingSize: 2,  
    unique: true 
  },
  status:{
    type: Boolean,
    default: true
  },
    for(let key in Language){
    key: StrategyTranslatedFieldsSchema
  }
},
{
    timestamps: true 
});  

const Strategy = mongoose.model('strategy', StrategySchema);

module.exports = Strategy;

像那个例子一样,保存多语言数据是一种好习惯吗? 谢谢

【问题讨论】:

    标签: mongodb mongoose multilingual mongoose-schema


    【解决方案1】:

    你可以这样做。

     // create object you want to pass StrategySchema 
     const strategySchemaObject = {
         slug: { 
             type: String, 
             slug: "en.title", 
             slugPaddingSize: 2,  
             unique: true 
         },
         status:{
             type: Boolean,
             default: true
        }
      }
    
      // add each field to your schema object
      Object.keys(Language.schema.obj).forEach((lang) => {
          strategySchemaObject[lang] = StrategyTranslatedFieldsSchema
       })
    
      // create your schema
      const StrategySchema = mongoose.Schema(strategySchemaObject, {
          timestamps: true
      })
    

    【讨论】:

    • 它在 Language forEach 上抛出错误,即 Language.forEach 不是函数。我首先尝试获取所有语言但仍然无法正常工作 const getLanguages = async function(){ return await Language.find(); } 常量语言 = getLanguages(); languagies.forEach((lang) => { strategySchemaObject[lang] = StrategyTranslatedFieldsSchema })
    • @Ali 你的语言是一个模型,我猜对吧?不,您要做的是尝试搜索数据库。也许尝试使用您支持的所有语言创建一个数组。
    • 是的,我也将它们保存在 Db 上
    • 您的回答正是我所需要的。但它在 foreach 上抛出错误。我需要从数据库中获取语言并循环它们的键
    • 抛出同样的错误(Language.schema.obj.forEach)
    猜你喜欢
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 2021-06-20
    • 2017-06-04
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 2021-06-04
    相关资源
    最近更新 更多