Javascript 在Meteor中对象数组的集合中插入文档
我有一个由多个对象组成的数组Javascript 在Meteor中对象数组的集合中插入文档,javascript,node.js,mongodb,meteor,Javascript,Node.js,Mongodb,Meteor,我有一个由多个对象组成的数组dataRows,例如 { 'The Name': 'John', 'My Age': 44, 'My Address': 'Some street', [...] } 我想将这些对象插入到集合中 因为我可以直接使用MyCollection.insert(object),所以我想我可以直接将对象插入到集合中;但是,问题是对象中的键的名称与集合中的字段名称不同,我不想在集合中插入所有字段 我可以这样做: dataRows.forEach( functi
dataRows
,例如
{
'The Name': 'John',
'My Age': 44,
'My Address': 'Some street',
[...]
}
我想将这些对象插入到集合中
因为我可以直接使用MyCollection.insert(object),所以我想我可以直接将对象插入到集合中;但是,问题是对象中的键的名称与集合中的字段名称不同,我不想在集合中插入所有字段
我可以这样做:
dataRows.forEach( function ( row ) {
MyCollection.insert( {
name: row['The Name'],
age: row['My Age'],
address: row['My Address'],
} );
} )
但是我认为如果我可以直接操作数组dataRows
会更好
此外,我不想跳过带有空值的字段
编辑
我有一个数组
[
{
'The Name': 'John',
'My Age': 44,
'My Address': 'Some street',
[...]
},
{
'The Name': 'Michael',
'My Age': 57,
'My Address': '',
[...]
},
{
'The Name': 'Anne',
'My Age': 31,
'My Address': 'Some other street',
[...]
},
[...]
]
我想操纵数组,这样就可以重命名键(例如,名称
应该是名称
,我的年龄
应该是年龄
,等等),应该删除没有值的字段(例如,数组中的第二个对象有一个值为空的键我的地址
。应该从此对象中删除键),我想知道应该保留哪些键,其余的键应该删除(例如,数组中的所有对象都应该有字段名称,年龄,地址,并且应该从每个对象中删除所有其他字段)
我想我应该使用array.map()
,array.filter()
,等等
我希望它能澄清我的问题。您仍然可以使用forEach()操作数组
方法和循环内利用写入命令,该命令允许执行批量插入操作,这些操作只是服务器顶部的抽象,因此易于构建批量操作,从而简化了操作。这些批量操作主要有两种风格:
- 有序大容量操作。这些操作按顺序执行所有操作,并在第一次写入错误时出错
- 无序批量操作。这些操作并行执行所有操作并聚合所有错误。无序批量操作不保证执行顺序
您可以通过rawCollection
和rawDatabase
方法对npm MongoDB驱动程序中的集合和数据库对象进行原始访问。例如,使用
,构造要插入到循环中的对象,批量发送插入操作以提高写入性能,如下所示:
MyCollection = new Meteor.Collection("mycollection");
if (Meteor.isServer) {
Meteor.startup(function () {
Meteor.methods({
insertData: function() {
var bulkOp = MyCollection.rawCollection().initializeUnorderedBulkOp(),
counter = 0,
dataRows = [...]; // the raw array
dataRows.forEach(function(row) {
var data = {
name: row['The Name'],
age: row['My Age'],
address: row['My Address'],
};
bulkOp.insert(data);
counter++;
if (counter % 1000 == 0) {
// Execute per 1000 operations and re-initialize every 1000 update statements
bulkOp.execute(function(e, rresult) {
// do something with result
});
bulkOp = MyCollection.rawCollection().initializeUnorderedBulkOp();
}
});
// Clean up queues
if (counter % 1000 != 0){
bulkOp.execute(function(e, result) {
// do something with result
});
}
}
});
});
}
您仍然可以使用forEach()操作数组
方法和循环内利用写入命令,该命令允许执行批量插入操作,这些操作只是服务器顶部的抽象,因此易于构建批量操作,从而简化了操作。这些批量操作主要有两种风格:
- 有序大容量操作。这些操作按顺序执行所有操作,并在第一次写入错误时出错
- 无序批量操作。这些操作并行执行所有操作并聚合所有错误。无序批量操作不保证执行顺序
您可以通过rawCollection
和rawDatabase
方法对npm MongoDB驱动程序中的集合和数据库对象进行原始访问。例如,使用
,构造要插入到循环中的对象,批量发送插入操作以提高写入性能,如下所示:
MyCollection = new Meteor.Collection("mycollection");
if (Meteor.isServer) {
Meteor.startup(function () {
Meteor.methods({
insertData: function() {
var bulkOp = MyCollection.rawCollection().initializeUnorderedBulkOp(),
counter = 0,
dataRows = [...]; // the raw array
dataRows.forEach(function(row) {
var data = {
name: row['The Name'],
age: row['My Age'],
address: row['My Address'],
};
bulkOp.insert(data);
counter++;
if (counter % 1000 == 0) {
// Execute per 1000 operations and re-initialize every 1000 update statements
bulkOp.execute(function(e, rresult) {
// do something with result
});
bulkOp = MyCollection.rawCollection().initializeUnorderedBulkOp();
}
});
// Clean up queues
if (counter % 1000 != 0){
bulkOp.execute(function(e, result) {
// do something with result
});
}
}
});
});
}
没有真正理解你的问题,你能澄清你想要实现什么或真正的问题是什么吗?很抱歉让人困惑。我已经编辑了我的问题。我希望现在更清楚。没有真正理解你的问题,你能澄清你想要实现什么或真正的问题是什么吗?很抱歉让人困惑的问题。我我已经编辑了我的问题。我希望现在更清楚。哇。谢谢。我会尝试一下:-执行是在forEach循环内完成的吗?执行是成批完成的,如计数器所示。正如您可以看到的,在循环内变量计数器
是递增的,并且每1000次操作和每1000条insert语句重新初始化一次。是的,我现在看到了。对不起:-)哇。谢谢我将尝试:-执行是否在forEach循环内完成?执行是成批完成的,如计数器所示。正如您在循环中看到的,变量计数器
是递增的,每1000个操作执行一次检查,每1000个insert语句重新初始化一次。是的,我现在看到了。对不起:-)