我需要通过迭代mongodb结果创建一个新数组。这是我的代码。
const result = await this.collection.find({
referenceIds: {
$in: [referenceId]
}
});
var profiles = [];
result.forEach(row => {
var profile = new HorseProfileModel(row);
profiles.push(profile);
console.log(profiles); //1st log
});
console.log(profiles); //2nd log
我可以在第一个日志中看到profiles数组的更新。但第二个日志打印只有空数组。
为什么我无法将项目推送到数组?
更新 我认为这与承诺无关。 HorseProfileModel类只是格式化代码。
const uuid = require("uuid");
class HorseProfileModel {
constructor(json, referenceId) {
this.id = json.id || uuid.v4();
this.referenceIds = json.referenceIds || [referenceId];
this.name = json.name;
this.nickName = json.nickName;
this.gender = json.gender;
this.yearOfBirth = json.yearOfBirth;
this.relations = json.relations;
this.location = json.location;
this.profilePicture = json.profilePicture;
this.horseCategory = json.horseCategory;
this.followers = json.followers || [];
}
}
module.exports = HorseProfileModel;
答案 0 :(得分:2)
await this.collection.find(...)
返回找到的数据数组吗?不,那很容易。找到 immeadiately 返回 Cursor 。将 forEach 调用到其上并不会调用同步Array.forEach
,而是调用Cursor.forEach
这是异步并且我们遇到了竞争问题。解决方案是将光标推广到其结果:
const result = await this.collection.find(...).toArray();