如何在mongodb中将数据附加到现有键的值

jty*_*999 3 mongodb node-mongodb-native

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

我要这个:

do something...//data has been changed to {'abc':'defghi'} or {'abc':'['def','ghi']'}
Run Code Online (Sandbox Code Playgroud)

我在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)
            });
Run Code Online (Sandbox Code Playgroud)

save api可以替换相同键的值,因此使用push,我可以数据附加到现有键的值上;

但是有一些问题:

  1. 推送操作性能不佳。单次保存可以运行15000 / s,但是使用push时为1500 / s。
  2. 如果我有两个客户端,两个都想要追加数据,则后面的一个将覆盖较早一个的数据,而不是追加。如何解决此问题?是否有API?

Sim*_*Sim 5

问题是您正在使用save哪个优先于文档:最后一个获胜。您应该考虑通过使用原子更新$push,也许通过findAndModify