我需要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()
的文档数组。