我陷入了一个我正在使用的功能中(我可能做错了)。所以快速解释一下,我想在集合中添加批量数据,该集合称为“站点”,CSV的格式是站点,国家/地区,类型。我正在尝试使用promises(Bluebird)。所以考虑一下代码:
Promise.each(sites, sites => new Promise((resolve, reject) => {
//console.log(sites);
let name = tools.extractDomain(req, res, sites[0]);
let country = sites[1];
let group = sites[2];
if (name != "" && country != "" && group != "") {
Site.findOne({ name: name }, "_id", function(err, duplicate) {
if (false) {
console.log("Duplicate site: " + duplicate);
} else {
//console.log("Adding " + name)
let site = new Site()
site.name = name
site.meta = {}
site.group = group
site.country = country
site.geomix = []
site.addedBy = req.user._id
site.addedAt = Date.now()
site.saveAsync().then(function(response){
tools.saveHistory(req, res, response._id, response.name, "Website Meta fetched.");
tools.saveHistory(req, res, response._id, response.name, "Link added for the first time."); //Save in history
resolve(site);
}).catch(function (e){
console.log(name);
reject();
});
}
});
}else{
console.log('Wrong Format');
}
}).then((data) => {
console.log('All websites processed!');
addedSites.push(data);
}).catch(err => {
//console.error('Failed');
}));
res.send({ status: 'ok', message: ''});
我正在进行ajax调用,所以我返回res.send({status:'ok',message:''}),我知道它在不正确的地方,我想沿着res发送一些数据。发送。目前,它在代码实际完成之前发送标头。我想在Mongo中添加所有数据之后发送标题但是在这种情况下每个都解析()所以如果我在“.each”的“.then”内发送标题我会得到标题已发送错误
这可能有点令人困惑。我觉得我做得不对。我有点疯狂,我找不到一个能理解和实施的正确例子。
但最后我的主要问题是:使用Ajax调用是什么正确的方法来添加使用promises在集合中添加1000个记录并实际控制那些未添加的人和那些不添加的人?
现在我的代码确实有效,但逻辑肯定是错误的。
感谢。
答案 0 :(得分:0)
您可以在模型上使用bulkWrite
。
参考:http://mongoosejs.com/docs/api.html#model_Model.bulkWrite
修改强>
抱歉,我误解了你。您需要将res.send({ status: 'ok', message: ''});
移至then()
和catch()
块,以便获得以下内容:
Promise.each(sites, sites => new Promise((resolve, reject) => {
// stuff you did before
}).then((data) => {
console.log('All websites processed!');
addedSites.push(data);
res.send({ status: 'ok', message: ''});
}).catch(err => {
res.send({ status: 'failed', message: err.message});
}));
答案 1 :(得分:0)
这也是我来的,如果有人能告诉我这是否是一个好的拱门。
Class X{
private String name;
private List<Y> ypojo;
//getters and setters
}
Class Y
{
private String stat;
private String nu;
//getters and setters
}