有什么方法可以使用mongoose从mongodb的批量操作中获取修改的IDS?

Martol1ni
let dbOperations = Edge.collection.initializeOrderedBulkOp()
edges.forEach(edge => {
    dbOperations.find({_id: edge.id}).upsert().updateOne({
        $set: {
            value: edge.value
        },
        $setOnInsert: {
            _id: edge.id
        }
    })
})
dbOperations.execute()
    .then(result => {
        console.log(result.nModified) // This shows the number of edges that is actually modified
        console.log(result.getModifiedIds()) // This is what I want to achieve
    })

有什么办法可以做到这一点?

布雷克七

从一个角度来看,答案是“不”,这是有充分理由的。

一般来说,MongoDB的“更新”操作旨在跨通常的“多个”文档工作,因此意味着符合条件的任何内容。因此,这里的一般情况是您是否要求以单数形式或通过选择来更新的内容取决于是否匹配任何内容而被更新。

在“批量”背景下,许多相同的道理也适用,因为有任何一个条件匹配与否,在这种情况下,你会得到的返回值nMatchednModifiedrepectively,因为还有一个“匹配”文件是可能性如果要修改的数据已经是修改目标的值,则不会实际更新。

nMatched之间的最后一个区别nModified“您无法可靠地执行此操作”的主要原因,因为并非所有匹配项都必须进行修改。

但是,在区分“ upsert”操作和实际的“ updates”的情况下,您可以提供一个客户评估值。由于存在明显的区别,它不会是100%准确的,但是基本过程是将输入列表与中的返回值进行比较getUpsertedIds(),这是一个有效的调用。

目前,在世界其他地方避开了ES6语法:

var upserted = result.getUpsertedIds();    // get this from the bulk result

upserted = upserted.map(function(up) { return up._id }); // filter out just the _id values

var modifiedIds = edges.map(function(edge) {    // get _id only from source 
    return edge.id;  
}).filter(function(edge) {
    return upserted.indexOf(edge) == -1;        // and return only non upserted
});

from的返回结果.getUpsertedIds()是一个对象数组,其中包含批量更新的“索引”位置和_id“ upsert”的生成或提供的值。

[ { index: 0, _id: 1 } ]

因此,将您的输入列表与“ upserted”列表进行匹配,以查看“不存在的内容”,基本上会返回可能刚刚修改过的内容。当然要注意,如果值已经与修改相同,那么它实际上根本不是修改。

但是由于API的工作方式,这与您将要达到的目标非常接近。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有什么方法可以使用firebase的云功能从“ child_added”事件中的节点获取数据?

来自分类Dev

使用mongoose在MongoDB中批量上传

来自分类Dev

有什么方法可以使用本机ACID兼容数据库获取Meteor?

来自分类Dev

有什么方法可以使用Buffer javascript包从字节获取位级别信息?

来自分类Dev

有什么方法可以使用Google Signup Android集成获取用户密码

来自分类Dev

有没有一种方法可以使用MongoDb在一次查询中获取文档和相关的方面?

来自分类Dev

有什么方法可以使用Zapier代码在触发器传递给操作之前将其转换为触发器中的数据?

来自分类Dev

在Nativescript中,有什么方法可以通过id在ActionBar中获取操作项吗?

来自分类Dev

有什么方法可以使用import someValue._在Scala中实现重写方法?

来自分类Dev

MongoDb批量操作获取ID

来自分类Dev

有什么方法可以使用PhantomJSDriver在PhantomJS中设置用户代理?

来自分类Dev

有什么方法可以使用Apache POI在Excel中创建数据透视表?

来自分类Dev

有什么方法可以使用Java动态地在zip文件中创建zip吗?

来自分类Dev

为什么我可以使用模板函数中的私有方法

来自分类Dev

有什么方法可以使用Java中的Thread在JPanel上绘制图形吗?

来自分类Dev

有什么方法可以使用下拉列表中的复选框?

来自分类Dev

有什么方法可以使用BeatifulSoup编辑html文件中以编程方式嵌套的表?

来自分类Dev

有什么方法可以使用Delete键从列表框中删除所选项目?

来自分类Dev

Python-有什么方法可以使用Openpyxl动态处理Excel文件中的数据

来自分类Dev

有什么方法可以使双击事件在使用原始JavaScript的手机中起作用?

来自分类Dev

有什么方法可以使用Java动态地在zip文件中创建zip吗?

来自分类Dev

有什么方法可以使用root在终端中打开新窗口吗?

来自分类Dev

有什么方法可以使用下拉列表中的复选框?

来自分类Dev

有什么方法可以使用 CI (HMVC) 中的路由重定向视图?

来自分类Dev

有什么方法可以使Flutter中的功能无法替代?

来自分类Dev

有什么方法可以使Flutter中的功能无法替代?

来自分类Dev

有没有其他方法可以使用CAS操作在Java中编写同步块?

来自分类Dev

有没有一种方法可以使用python在应用程序中执行特定操作?

来自分类Dev

有什么方法可以使用sourceCpp()制作Infix函数

Related 相关文章

  1. 1

    有什么方法可以使用firebase的云功能从“ child_added”事件中的节点获取数据?

  2. 2

    使用mongoose在MongoDB中批量上传

  3. 3

    有什么方法可以使用本机ACID兼容数据库获取Meteor?

  4. 4

    有什么方法可以使用Buffer javascript包从字节获取位级别信息?

  5. 5

    有什么方法可以使用Google Signup Android集成获取用户密码

  6. 6

    有没有一种方法可以使用MongoDb在一次查询中获取文档和相关的方面?

  7. 7

    有什么方法可以使用Zapier代码在触发器传递给操作之前将其转换为触发器中的数据?

  8. 8

    在Nativescript中,有什么方法可以通过id在ActionBar中获取操作项吗?

  9. 9

    有什么方法可以使用import someValue._在Scala中实现重写方法?

  10. 10

    MongoDb批量操作获取ID

  11. 11

    有什么方法可以使用PhantomJSDriver在PhantomJS中设置用户代理?

  12. 12

    有什么方法可以使用Apache POI在Excel中创建数据透视表?

  13. 13

    有什么方法可以使用Java动态地在zip文件中创建zip吗?

  14. 14

    为什么我可以使用模板函数中的私有方法

  15. 15

    有什么方法可以使用Java中的Thread在JPanel上绘制图形吗?

  16. 16

    有什么方法可以使用下拉列表中的复选框?

  17. 17

    有什么方法可以使用BeatifulSoup编辑html文件中以编程方式嵌套的表?

  18. 18

    有什么方法可以使用Delete键从列表框中删除所选项目?

  19. 19

    Python-有什么方法可以使用Openpyxl动态处理Excel文件中的数据

  20. 20

    有什么方法可以使双击事件在使用原始JavaScript的手机中起作用?

  21. 21

    有什么方法可以使用Java动态地在zip文件中创建zip吗?

  22. 22

    有什么方法可以使用root在终端中打开新窗口吗?

  23. 23

    有什么方法可以使用下拉列表中的复选框?

  24. 24

    有什么方法可以使用 CI (HMVC) 中的路由重定向视图?

  25. 25

    有什么方法可以使Flutter中的功能无法替代?

  26. 26

    有什么方法可以使Flutter中的功能无法替代?

  27. 27

    有没有其他方法可以使用CAS操作在Java中编写同步块?

  28. 28

    有没有一种方法可以使用python在应用程序中执行特定操作?

  29. 29

    有什么方法可以使用sourceCpp()制作Infix函数

热门标签

归档