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