我正在为多语言站点使用以下结构。为此,我将做一个工具来添加/编辑可用的不同语言的所需单词。
我想做的是在NodeJS / Express后端上使用MongoDB(或Mongoose)查询来获取特定语言的密钥-
{
"languages": [
{
"_id": "5d4ee75c1c9d4400007e9bd8",
"code": "en",
"texts": [
{
"key": "language",
"word": "English"
},
{
"key": "title",
"word": "Colorblindness"
},
{
"key": "login",
"word": "Login"
}
]
},
{
"_id": "5d4ee8631c9d4400007e9bd9",
"code": "es",
"texts": [
{
"key": "language",
"word": "Español"
},
{
"key": "title",
"word": "Daltonismo"
},
{
"key": "account",
"word": "Cuenta"
},
{
"key": "exit",
"word": "Salir"
}
]
},
{ ... }
]
}
例如,如果我查询“ en”(英语),我希望结果是类似
["language", "title", "login"]
,但是如果我查询“ es”(西班牙语),结果应该是
["language", "title", "account", "exit"]
答案 0 :(得分:0)
Schema.findOne({code: "en"},(err,res)=>{
if (res) console.log(res.texts);
});
它是猫鼬,目前无法使用,但您需要根据模式名称开头的代码进行编辑。
假设每个代码都有其自己的字段,则应将“ en”更改为“ es”。
答案 1 :(得分:0)
对于您的查询,假设 languages.code 具有唯一的值:
db.yourCollectionName.aggregate([
{$match:{'languages.code': "es"}},
{$unwind:'$languages'},
{$match:{'languages.code': "es"}},
{$project:{keys:'$languages.texts.key'}}
])
假定您的馆藏是一个大型数据集,然后在第一阶段添加$match
会过滤文档中 languages.code 的至少一个元素值为“ es”的文件。