我需要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函数。

最佳答案

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

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

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


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

10-08 04:38