3

例如我的数据是{'abc':'def'},它有一个键值;

我要这个:

do something...//data has been changed to {'abc':'defghi'} or {'abc':'['def','ghi']'}

我在nodejs中使用了这段代码:

                var tmp2 = {'userid:location:2013-01-02 15':['092030', '12122.11260E']};

            collection.insert(tmp2, {safe:true}, function (err, result) {
                var i = 0;
                var a = +new Date();
                while(i<300000){
                    tmp2['userid:location:2013-01-02 15'].push(i);
        collection.save(tmp2, function () { })      
                    i+=1;
                }
                var b = +new Date();
                console.log(b-a)
            });

保存 api 可以替换相同键的值,所以使用推送,我可以将数据附加到现有键的值;

但是有一些问题:

  1. 推送操作性能很差。单次保存可以运行15000/s,但是使用推送时是1500/s。
  2. 如果我有两个客户端,都想追加数据,后面的将覆盖前面的数据,而不是追加。这个问题怎么解决?有API吗?</li>
4

1 回答 1

5

问题是您正在使用savewhich 覆盖文档:最后一个获胜。您应该考虑使用原子更新$push,也许是通过findAndModify.

于 2013-04-08T03:13:47.787 回答