如何在MongoDB中的数组中列出对象的字段?

时间:2019-08-16 04:07:42

标签: javascript node.js mongodb mongoose backend

我正在为多语言站点使用以下结构。为此,我将做一个工具来添加/编辑可用的不同语言的所需单词。

我想做的是在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"]

2 个答案:

答案 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”的文件。