搜索

首页  >  问答  >  正文

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

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

1

2

3

4

5

6

7

8

9

10

11

<code class="js">    {

        name: String,

        hot: {

            type: Number,

            default: 0

        },

        create_at: {

            type: Date,

            default: Date.now

        }

    }</code>

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

1

2

3

4

5

6

7

8

9

10

11

12

<code class="js">mongo.tags.update({

    name:{

        $in:['mongoDB','node.js','mysql']

        }

},{

    $inc:{

        hot:1

    }

},{

    upsert: true,

    multi:true

})</code>

这样的操作,但是现在我执行这个命令的时候都是新增了一个空的数据

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

淡淡烟草味淡淡烟草味2771 天前1020

全部回复(2)我来回复

  • ringa_lee

    ringa_lee2017-05-24 11:37:41

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

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

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

    供参考。

    Love MongoDB! Have fun!


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

    回复
    0
  • 某草草

    某草草2017-05-24 11:37:41

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

    回复
    0
  • 取消回复