Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor.js:MongoDB批量/批量升级_Mongodb_Meteor_Bulkinsert_Upsert_Smartcollection - Fatal编程技术网

Meteor.js:MongoDB批量/批量升级

Meteor.js:MongoDB批量/批量升级,mongodb,meteor,bulkinsert,upsert,smartcollection,Mongodb,Meteor,Bulkinsert,Upsert,Smartcollection,我在互联网上搜索了几个小时,寻找一种解决方案,在Meteor.js的smart collections中进行批量升级是有效的 场景: 我正在使用api,每12小时异步获取200个属性的更新信息。对于每个属性,我平均得到大约300个JSON对象的数组。70%的对象可能尚未更新。但对于其余30%的对象,我需要在数据库中更新它们。因为若不将这些30%的对象和数据库中的文档进行匹配,就无法找到它们,所以我决定将所有文档都插入 我的选项: 在对象数组上运行循环,并向上插入数据库中的每个文档 从集合中删除所

我在互联网上搜索了几个小时,寻找一种解决方案,在Meteor.js的smart collections中进行批量升级是有效的

场景:

我正在使用api,每12小时异步获取200个属性的更新信息。对于每个属性,我平均得到大约300个JSON对象的数组。70%的对象可能尚未更新。但对于其余30%的对象,我需要在数据库中更新它们。因为若不将这些30%的对象和数据库中的文档进行匹配,就无法找到它们,所以我决定将所有文档都插入

我的选项:

  • 在对象数组上运行循环,并向上插入数据库中的每个文档
  • 从集合中删除所有文档并批量插入新对象
  • 对于选项1,运行循环并升级60K个文档(这些文档将随着时间的推移而增加),需要花费大量时间。但目前似乎是唯一可行的选择

    对于选项2,meteor.js不允许在其智能集合中进行批量插入。即使这样,我们也必须在对象数组上循环


    是否还有其他方法可以有效地实现这一点?

    MongoDb支持插入文档数组。因此,您可以在Meteors“rawCollection”的一次调用中插入所有文档

    MyCollection.remove({}); // its empty
    
    var theRaw = MyCollection.rawCollection();
    var mongoInsertSync = Meteor.wrapAsync(theRaw.insert, theRaw);
    var result = mongoInsertSync(theArrayOfDocs);
    

    在生产代码中,如果插入失败,您将在try/catch中对此进行包装,以获取错误信息。只有在文档数组插入成功时,结果才是好的。

    上述带有rawCollection的解决方案确实插入,但它似乎不支持ordered:false指令,以便在一个文档失败时继续处理,原始集合在第一个错误时退出,这是不幸的

    如果为false,则执行无序插入;如果其中一个文档出现错误,则继续处理数组中的其余文档