如何使用i18n为Mongo构建查询?

时间:2016-03-14 06:30:00

标签: javascript node.js mongodb mongoose

我在我的快递应用程序中使用i18n-node,我需要使用getLocale()“前缀”从数据库中获取数据

更新了问题

我的猫鼬模式

 var mongoose = require('mongoose'),
   Schema = mongoose.Schema; 
   var ArticleSchema = new Schema({
      title: {
        en : {type: String},
        it : {type: String},
        fr : {type: String},                 
          },
    content: {
        en : {type: String},
        it : {type: String},
        fr : {type: String},                 
          },

MyController

  exports.list = function (req, res) {
       var locale = i18n.getLocale();
       console.log('locale',locale); //working -> en

     Article.find({'title.locale':locale}).sort('-created').populate('user',    'displayName').exec(function (err, articles) {
  if (err) {
    return res.status(400).send({
      message: errorHandler.getErrorMessage(err)
    });
  } else {
    console.log('articles',articles,'res');
    res.json(articles);
  }
});
};

我希望获得所有带有en(例如)前缀的文章。 getLocale()方法返回enit等语言环境。  如何构建查询“查找所有文章”标题(或内容):getLocale()“? 即使Article.find({'title': 'en'})无法正常工作

1 个答案:

答案 0 :(得分:0)

我认为单独使用其关键字段获取子文档很困难。您需要提供子文档的值,例如Article.find({'title.en' : 'sample' })。 [更新]

我希望这能解决您的问题

var locale = getLocale();//get locale  returns it, en
var query = {
  'title.'+locale:{ $exists : true, $ne : null }
}
Article.find(query, function(err, articles) {
  console.log(articles);
});