我需要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
函数。
答案 0 :(得分:2)
您的a
变量是重复的变量,因此您不断向jobs
添加相同的密钥(即insert_asd
)。
如果您不一定需要在结果中引用特定的插入操作,则可以使jobs
成为数组而不是对象:
var jobs = _(data).map(function(a, key) {
return function(callback) {
....
};
}).value();
但是,您的MongoDB驱动程序可以一次性添加文档,而不是单独添加。官方MongoDB驱动程序支持使用insertMany()
的文档数组。