Nodejs Mongodb更新回调问题

时间:2014-07-23 15:31:17

标签: node.js mongodb mongoose mongodb-query

我使用mongodb驱动程序和快速csv导入mongodb中的csv文件。问题是,如果该记录不在集合中,则需要在集合中插入该记录并以其他方式更新它。记录存在或否由其id确定。除此id之外,我还需要一个自动递增的_id字段.csv如图所示。

1001,a,201
2001,b,202
2001,c,203
3001,d,204
3001,e,205

fast csv读取并作为数据传递给回调。

data=[1001,a,201]

因此,当读取第一条记录时,它应该作为

进入数据库
{ "_id":1,rid:"1001", "a":"101"}

第二条记录:

{ "_id":2, rid:"2001", "b":"102"}

现在当第三条记录将作为记录读取时使用rid:" 2001"它已经存在,它应该只通过在其中添加新的key:value来更新记录,即在更新之后它应该是:

{ "_id:2",rid:"2001","a":"101","c":"203"}.

我在更新方法的更新参数中使用$ setOnInsert:{_ id:index}。如果记录已经存在,$ setOnInsert将没有任何效果。现在结合设置upsert:true应该正常工作。但我无法弄清楚如何增加index.I最初尝试使用count方法,并在count的回调中更新记录,但因为没有保证何时执行回调,插入记录后,下一次该记录的计数仍显示为0.可以使用mongoose解决此问题。在mongoose中我们需要一个schema.But我希望每条记录都有不知名的字段数,如:

{_id:1,rid:"1001","a":"101","c":203","d":"208", .. , .. ,..}

查询:     字段= {}     字段[数据[1]] =数据[2];

db.collection("collectionname").update(query,{$setOnInsert:{_id:++index},$set:fields},{upsert:true,w:0} ); 

还需要自动递增_id。那么如何证明正确的索引(为新记录递增)?即使使用不同的驱动程序,任何关于此的指针都会有所帮助。但是需要灵活的模式。

csv文件内容:

1,101,111
2,102,222
2,103,223
3,104,224
3,105,225
4,106,226
4,107,227
4,108,228

代码:

var MongoClient = require('mongodb').MongoClient;
var csv = require("fast-csv");
var index=0;

MongoClient.connect('mongodb://127.0.0.1:27017/database', function(err, db) {
    if(err) throw err;

    csv.fromPath("data.csv")
        .on("record", function(data){               
            doc={};
            doc[data[1]]=data[2];
            db.collection("r").update(
                {"rid":Number(data[0])},
                { 
                    "$setOnInsert": {
                        "_id": ++index
                    },
                    "$set":doc
                },
                { "w":0, "upsert" :true }
            );                  
        })      

        .on("end", function(){
            console.log("done");
        });

    });

输出:

{ "_id" : 1, "rid" : 1, "101" : "111" }
{ "_id" : 2, "rid" : 2, "102" : "222", "103" : "223" }
{ "_id" : 4, "rid" : 3, "104" : "224", "105" : "225" }
{ "_id" : 6, "rid" : 4, "106" : "226", "107" : "227", "108" : "228" }

必需的输出:

{ "_id" : 1, "rid" : 1, "101" : "111" }
{ "_id" : 2, "rid" : 2, "102" : "222", "103" : "223" }
{ "_id" : 3, "rid" : 3, "104" : "224", "105" : "225" }
{ "_id" : 4, "rid" : 4, "106" : "226", "107" : "227", "108" : "228" }

0 个答案:

没有答案