与mongoose相同的mongodb coalesce

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

这是一个JSON表示forms:

[ { "_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 

提前致谢。

我发现了一个聚合框架的解决scheme:

$ ifNull中使用$ project

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