我正在尝试为用户和用户朋友播放一个mongo数据库。
用户是它自己的模型(带有对模型的参考)。
我有两个数据数组用于为数据库设定种子。 friends数组包含子数组。每个子阵列-in order-包含相应用户阵列的朋友。 即friends [0]是用户[0]的朋友。
目标是创建用户,然后搜索以确定用户好友文档是否全部就绪。如果他们没有,请创建朋友文档,然后将其推送给该用户。
代码创建用户,但只创建朋友[0]中的朋友。它似乎与异步有关,但不知道下一步该去哪里。
zip
输出的最后一部分是随机的,每次运行都会发生变化。
答案 0 :(得分:0)
我会将你的循环分成两个独立的任务。附:考虑不保存user.friends
,而user.friendsIDs
(更常见)
var users = [
{name: 'user 1'},
{name: 'user 2'}
];
var friends = [
[{name: 'Alex'}, {name: 'John'}],
[{name: 'Alex'}, {name: 'Max'}]
];
// save all friends first
var flattenFriends = [].concat.apply([], friends);
var names = [];
var filteredFriends = flattenFriends.filter(function(friend, i) {
if(names.indexOf(friend.name) > -1) return false;
names.push(friend.name);
return true;
});
filteredFriends.forEach(function(friend) {
Friend.find({name: friend.name}, function(found) {
if(!found) {
var newFriend = new Friend(friend);
newFriend.save();
}
});
});
// save all users (with friends)
users.forEach(function(user, i) {
var user = user;
user.friends = [];
friends[i].forEach(function(friend, j) {
Friend.find({name: friend.name}, function(found) {
user.friends.push(found)
})
});
var newUser = new User(user);
newUser.save();
});