如何将数据附加到mongodb中的现有密钥值

时间:2013-04-08 02:34:17

标签: mongodb node-mongodb-native

例如我的数据是{'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)
            });

save api可以替换相同的密钥值,因此使用push,我可以追加数据到exising密钥的值;

但是有一些问题:

  1. 推送操作表现不佳。单个保存可以运行15000 / s,但是当使用push时,它是1500 / s。
  2. 如果我有两个客户端,都想要附加数据,后者就会 覆盖早期的数据,不附加。 我该如何解决这个问题?是否有API?

1 个答案:

答案 0 :(得分:4)

问题是您正在使用覆盖文档的save:最后一个获胜。您应该考虑使用atomic updates with $push,也许通过findAndModify