我有一个本地化 集合,其中每个文档都是翻译成多种语言的键值对。
这是一个 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 的解决方案:
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/