Javascript 如何在mongoose中通过单个键迭代多个值
我有一个web应用程序,它使用MongoDB作为数据库,我试图在一个名为passport的属性中迭代多个值 这是我的模式: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
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' } } ] ]