我有以下数组,它由一些属性和一个包含更多对象的数组组成。
var array = [
{
prop1Name: 'Thing',
prop2ID: 1
propArray: [
{
innerProp1Name: 'Name 1',
innerProp2ID: 1
},
{
innerProp1Name: 'Name 2',
innerProp2ID: 2
},
]
},
{
prop1Name: 'Thing 2',
prop2ID: 2
propArray: [
{
innerProp1Name: 'Name 1',
innerProp2ID: 1
},
{
innerProp1Name: 'Name 2',
innerProp2ID: 2
},
]
}
]
现在,我的目标是通过Node.JS API将其插入到数据库中。我已经涉足了async.js,但我想知道async.each()
内部的async.each()
是否可以进入这里。也许我可以在第一个async.each()
的迭代器函数中定义它。
该表需要propArray中每个条目的外部属性的ID。 PropArray控制要添加的行。
答案 0 :(得分:1)
循环遍历嵌套数组,并且当数组和嵌套数组很大时,为每个条目执行db insert非常昂贵。如果db驱动程序允许你进行数组插入(大多数情况下都是这样),那么使用常规for循环将其展平并进行1 db插入会更便宜。像这样的东西:
var array = [ ... ]; // your array
var i, j, outLen, inLen, item, innerItem;
var result = [];
for (i = 0, outLen = array.length; i < outLen; i++) {
item = array[i];
for (j = 0, inLen = item.propArray.length; j < inLen; j++) {
innerItem = item.propArray[j];
result.push({
prop1Name: item.prop1Name,
prop2ID: item.prop2ID,
innerProp1Name: innerItem.innerProp1Name,
innerProp2ID: innerItem.innerProp2ID
});
}
}
db.collection.insert(result, ...);
这没有任何错误检查和内部数组的存在。你可能想这样做。