mongo中如何批量更新一组数据,当数组中的数据不存在的时候进行插入操作?

发布于 2022-09-04 23:20:25 字数 798 浏览 29 评论 0

例如我在mongo有一个标签表,数据模型如下

    {
        name: String,
        hot: {
            type: Number,
            default: 0
        },
        create_at: {
            type: Date,
            default: Date.now
        }
    }

现在我有一个数组的标签名,例如['mongoDB','node.js','mysql'],
我想批量更新热度,如果发现没有这个标签的时候插入,实现像

mongo.tags.update({
    name:{
        $in:['mongoDB','node.js','mysql']
        }
},{
    $inc:{
        hot:1
    }
},{
    upsert: true,
    multi:true
})

这样的操作,但是现在我执行这个命令的时候都是新增了一个空的数据
image.png
现在我实现的方法就是先做一次查询,能查询到的更新,不能查询到的进行插入操作,但是这样的操作需要从代码中遍历多次标签数组,性能不好,想请教下各位大牛有没有更好的解决方法。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无可置疑 2022-09-11 23:20:25

1、您的update operation的语句没问题;

2、您所说的新增一个空的数据,是因为没有查找到满足条件的document,并且设置upsert为true,所以插入了一个包含feild hot的document。

不妨检查一下自己的collection的document情形,再试试。您的update operation没有发现问题。

供参考。

Love MongoDB! Have fun!


2017MongoDB中文社区北京用户组大会在即!扫码报名中!
图片描述

差↓一点笑了 2022-09-11 23:20:25

mongodb里面用upsert应该可以实现
upsert({},{},true) true表示没有就写入,有就更新;
可以参考官方支持萌阔论坛:
http://forum.foxera.com/mongo...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文