Javascript 获取从mongoimport更新的文档的结果

Javascript 获取从mongoimport更新的文档的结果,javascript,node.js,json,mongodb,mongoimport,Javascript,Node.js,Json,Mongodb,Mongoimport,我正在使用mongoimport将文档升级到集合。我使用shelljs来运行实际的mongoimport命令,与通过CLI运行命令的方式相同 例如。 mongoimport docs.json-ddb-c集合--jsonArray--upsertFields=foo,bar 这只是输出更新后的文档的#,但没有给出任何关于具体更改内容的详细信息 但是,我需要能够看到哪些文档被实际更新/插入,然后对这些结果进行处理。我本以为有某种方法可以得到这些文档的对象ID(可能是通过一些-v verbose标志

我正在使用
mongoimport
文档升级到
集合
。我使用
shelljs
来运行实际的
mongoimport
命令,与通过CLI运行命令的方式相同

例如。
mongoimport docs.json-ddb-c集合--jsonArray--upsertFields=foo,bar
这只是输出更新后的
文档的#,但没有给出任何关于具体更改内容的详细信息

但是,我需要能够看到哪些文档被实际更新/插入,然后对这些结果进行处理。我本以为有某种方法可以得到这些
文档的
对象
ID
(可能是通过一些
-v verbose
标志),但在进行研究后,令人惊讶的是似乎没有办法


有人知道如何使用
mongoimport
获取更新的
文档吗?如果真的不可能,有没有办法用猫鼬来做到这一点?此外,是否有任何方法可以检查
文档中更新的内容的差异,即upsert中更改的字段?谢谢

我认为不可能从批量操作中获得这样的信息

使用Mongoose,您必须遍历每个文档,并比较当前文档和新文档,以获得不同的字段。您可以:

  • 在更新每个文档之前使用或获取差异
  • 自己比较

  • 这样的foo、bar嵌套路径是否已定义。子字段
    ?什么类型的foo,bar?不,没有嵌套字段。所有类型都是“字符串”,但在尝试将~5k条记录插入到1/4M文档集合时,效率如何?实际的
    mongoimport
    版本是即时的,带有索引。每个文档只有六个字段。您可以并行执行它们,这不会是一个瞬间,但不应超过30秒。可能只有5-10秒。有没有关于如何并行执行的建议。我唯一做过的其他并行编程是在C中使用
    threads
    和OpenCL@user2402616看看这个,然后
    const doc = await MyModel.findById(newDoc._id) // or .findOne for other upsert query conditions
    if (doc) {
      const { foo, bar } = newDoc // assuming foo, are are top level fields
      doc.set({ foo, bar })
      const modifiedPaths = doc.directModifiedPaths() // should work if foo, bar are not objects
    } else {
      // no previous doc, insert...
      await MyModel.create(newDoc)
    }
    
    
    const { foo, bar } = newDoc
    const doc = await MyModel.findByIdAndUpdate(newDoc._id, { $set: { foo, bar } }, { new: false, upsert: true })
    // or .findOneAndUpdate for other upsert query conditions
    /* since we passed new: false, the operation will return the original document or null if not exists */
    
    const { foo: newFoo, bar: newBar } = doc
    // compare foo & newFoo, bar & newBar