Mongo不接受插入重复的用户名

时间:2015-06-30 10:49:55

标签: javascript node.js mongodb asynchronous

我需要mongo接受重复的用户名,因为你可能拥有不同网站的用户名,我的代码就像这样。

_(data)
    .forEach(function (a, key) {
        jobs['insert_' + a] = function (callback) {
          mongo.open(config.MONGO_DB)
            .collection('usernames')
            .insert({
               username: a,
               indic: key,
               favorites: ''
             }, function (err, result) {
                  if (err) {
                    return next(err);
                  }

                  callback();
            });
       };
     }
  .commit();
async.parallel(jobs, send_response);

我只得到这一行

{ "_id" : ObjectId("5592724901c01a6ca6b76a6a"), "username" : "asd", "indic" : "twitch", "favorites" : "" }

我传递的数据是:

data = {twitch: 'asd', hitbox: 'asd', dailymotion: 'asd'}

我不应该有这样的东西吗?

`{ "_id" : ObjectId("5592724901c01a6ca6b76axx"), "username" : "asd", "indic" : "twitch", "favorites" : "" }
{ "_id" : ObjectId("5592724901c01a6ca6b76axx"), "username" : "asd", "hitbox" : "twitch", "favorites" : "" }
{ "_id" : ObjectId("5592724901c01a6ca6b76axx"), "username" : "asd", "dailymotion" : "twitch", "favorites" : "" }

我使用this作为async函数。

1 个答案:

答案 0 :(得分:2)

您的a变量是重复的变量,因此您不断向jobs添加相同的密钥(即insert_asd)。

如果您不一定需要在结果中引用特定的插入操作,则可以使jobs成为数组而不是对象:

var jobs = _(data).map(function(a, key) {
  return function(callback) {
    ....
  };
}).value();

但是,您的MongoDB驱动程序可以一次性添加文档,而不是单独添加。官方MongoDB驱动程序支持使用insertMany()的文档数组。