node.js - mongodb 合并等效(与 Mongoose )

标签 node.js mongodb mongoose

我有一个本地化 集合,其中每个文档都是翻译成多种语言的键值对。

这是一个 JSON 表示:

[
  { "_id": "form.password" , "en": "Password"  , "he": "סיסמא"  , "ru": "пароль" }
  { "_id": "form.email"    , "en": "Email"     , "he": "אימייל" },
  { "_id": "form.firstname", "en": "First Name", "he": "שם פרטי", "ru": "Имя" }
]

这是一个 Mongoose 模式:

new Schema({
  _id: {
    type: String,
    required: true
  },
  en: String,
  he: String,
  ru: String
});

我需要使用 express.js 获取每种语言的所有键值:

app.get('/api/locals', function(req, res) {
  Local.find().select( req.query.language ).exec(function(err, data) {
    res.json(data);
  });
});

如果每种语言都有所有键的值,这很好用,但我想做一个后备,如果某种语言对某个键没有值,那么英语值将被使用。

我想也许我应该使用聚合或 mapReduce,但我不知道如何用 mongoose 实现它。

我曾经使用 SQL 编写此查询:

SELECT key, COALESCE($language , en) as value FROM locals

提前致谢。

最佳答案

我找到了 Aggregation framework 的解决方案:

使用 $project$ifNull :

app.get('/api/locals', function(req, res) {
  Local.aggregate({
    $project: {
      value: {
        $ifNull: ["$" + req.query.language , "$en"]
      }
    }
  }).exec(function(err, data) {
    res.json(data);
  });
});

关于node.js - mongodb 合并等效(与 Mongoose ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21512415/

相关文章:

node.js - 尝试在命令行创建一个 Express 应用程序

java - Mongo SSL 和 Java 驱动程序

C# MongoDB 复杂类序列化

javascript - 简单的 db mongo 查询出错了?

mongodb - 平等条件在 group by mongodb 中无法正常工作

Node.js 应用程序级第三方 API 调用速率限制

node.js - 在同一个js文件node.js中调用exports.start

node.js - 哎呀!我想我破坏了我的工作环境(nvm、npm 和 Node w/Angular)。 :(

mongodb - 从外部 Web 服务器使用 MongoHQ 时预计会有多长时间的延迟

javascript - 使用 require 从并行 Mean.js 项目加载模型文件时出现 Mongoose 错误