Javascript 如何在mongoose中通过单个键迭代多个值

Javascript 如何在mongoose中通过单个键迭代多个值,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我有一个web应用程序,它使用MongoDB作为数据库,我试图在一个名为passport的属性中迭代多个值 这是我的模式: var EmployeeDBSchema = new Schema({ /* Passport tab schema */ passportInfo: { passportDetails: [] }, 以下是机器人世界里的情况: 我尝试检查是否可以将其作为数组检索,因此我执行了以下操作: console.log(_.map(re

我有一个web应用程序,它使用MongoDB作为数据库,我试图在一个名为passport的属性中迭代多个值

这是我的模式:

var EmployeeDBSchema = new Schema({

    /* Passport tab schema */
    passportInfo: {
        passportDetails: []
    },
以下是机器人世界里的情况:

我尝试检查是否可以将其作为数组检索,因此我执行了以下操作:

console.log(_.map(results, _.property('passportInfo')));
passportArr = _.map(results, _.property('passportInfo'));
console.log("is passport array? " + _.isArray(passportArr));
结果:

现在,由于它是正的,我尝试使用ff像普通数组一样迭代它。代码:

 _.forEach(passportArr, function (value, key) {
     _.forEach(passportArr[key], function(value2, key2){
         console.log(key2 + " >> " + value2);
     });
 });
然而,我得到的是:

如何获取passportExpiry、passportNumber和countryOfOrigin的值

我真的很难受。希望有人能帮忙

多谢各位

编辑:不确定这是否有帮助,但是,我从中得到了结构的想法。Passport背后的主要思想是用户可以添加无限数量的Passport信息(因此使用
passportInfo
数组)。我试图在这里检索数据,以便将其呈现为CSV文件

更新: 以下是根据请求(从
控制台.log
)展开的
结果:

  • 您的
    passportInfo
    中的数据有点不正确,可能是由于输出数据后出现复制粘贴错误

  • 我认为您希望将所有存储的护照信息导出为
    国家格式的
    csv
    ;数量;到期日


  • 首先要确保实际数据和预期数据在结构上是相同的。如果没有,您仍然可以在之前添加转换步骤(例如,展平数组或将对象从
    {0:123}
    转换为
    [123]

    一旦这一点得到控制,您就可以开始将
    employee.passortinfo
    的对象从结构化对象映射到
    csv
    所需的信息数组。这是使用
    Array.prototype.map
    实现的

    我在该映射中添加了另一个步骤,以确保将形式为
    {0:123}
    passportInfo.passportNumber
    的对象转换为数组
    [123]
    。然后,通过添加
    passportInfo.countryOfOrigin
    .passportExpiry
    ,使用此数组映射到
    csv
    的单行

    //以下代码片段仅对一名员工执行操作。如果你有一个数组,根据你的需要使用一个迭代函数。
    const employee={u id:123,
    employeeID:'123asd12',
    desiredRoleOther:“其他角色”,
    desiredRole3:“角色3”,
    desiredRole2:“角色2”,
    desiredRole1:“角色”,
    等密度分类信号:“Y”,
    员工名称:“简·多伊”,
    yrsInIT:1,
    visaInfo:[{
    VisaCountryForigin:[对象],
    visaNumber:“asd”,
    visaEntry:“单身”,
    visaExpiry:“2017-03-16T16:00:00.000Z”,
    维斯塔斯:“过期”}
    ],
    passportInfo:[{
    原产国:“ABC”,
    护照号码:{0:'123123'},
    护照说明:“2017-03-03”
    }, {
    原产国:“DEF”,
    护照号码:{0:'321321',1:'123123'},
    护照解释:“2017-03-08T16:00:00.000Z”
    }, {
    原产国:“GHI”,
    护照号码:{0:'654654654'},
    护照解释:“2017-03-10T16:00:00.000Z”
    } ]
    };
    const PassportNumber=编号=>
    key(numbers).map(key=>numbers[key]);
    const info=employee.passportInfo.map({passportNumber,passportExpiry,countryOfOrigin})=>
    设置passportNumber(passportNumber).map(number=>
    [原产国、编号、护照证明]
    )
    );
    常量行=([line])=>line;
    const joinLine=(line)=>line.join(“;”);
    常量线=信息地图(扁平线);
    console.log(lines.map(joinLine));
    
    console.log(lines.map(joinLine.join('\n'))模式和数据库之间存在差异:passportInfo是模式中的一个对象,但它是数据库中的一个数组(根据Robomongo)。这正常吗?请粘贴一个完整的输入数据集(示例中的初始
    结果
    ),供人们使用你好,AlexPánek,谢谢。不幸的是,由于工作中的隐私原因,我不确定是否可以将完整的结果粘贴到这里。这里的数据样本只是一个模型。Fwiw,这只是您的普通员工数据库模式;您只需在此处添加一个
    employeeID
    属性或其他内容,就可以完成设置了。:)@B尼尔苏,我自己也不确定。。。这是我工作过的第一个使用MongoDB作为数据库的项目。以某种方式对值进行置乱,或者插入假值。只有结构是重要的。嗨,谢谢你的清晰(非技术性)解释!但是有一个问题,
    =>
    做什么?这是我第一次在JS中看到这个。这是将对象转换为其他类型的快捷方式吗?@DeeJ
    =>
    是函数文本的“箭头语法”。有关更多信息,请参阅。
    full results
    [ { _id: dummyiddontmind123,
        employeeID: '123asd12',
        desiredRoleOther: 'Other role',
        desiredRole3: 'Role 3',
        desiredRole2: 'Role 2',
        desiredRole1: 'The Role',
        isOpenToIntlAssignment: 'Y',
        employeeName: 'Jane Doe',
        yrsInIT: 1,
        visaInfo:
        [ { visaCountryOfOrigin: [Object],
            visaNumber: 'asd',
             visaEntry: 'Single',
             visaExpiry: '2017-03-16T16:00:00.000Z',
             visaStatus: 'expired' } ],
        passportInfo:
        [ { countryOfOrigin: [Object],
             passportNumber: [Object],
             passportExpiry: '2017-03-03' },
           { countryOfOrigin: [Object],
             passportNumber: [Object],
             passportExpiry: '2017-03-08T16:00:00.000Z' },
           { countryOfOrigin: [Object],
             passportNumber: [Object],
             passportExpiry: '2017-03-10T16:00:00.000Z' } ] } ]
        [ [ { passportExpiry: '2017-03-03',
             passportNumber: { '0': 'EB1234567' },
             countryOfOrigin: { '0': 'Philippines' } },
            { passportExpiry: '2017-03-08T16:00:00.000Z',
              passportNumber: { '1': 'AS1234' },
              countryOfOrigin: { '1': 'Japan' } },
            { passportExpiry: '2017-03-10T16:00:00.000Z',
              passportNumber: { '2': 'AX123' },
              countryOfOrigin: { '2': 'Singapore' } } ] ]