簡體   English   中英

貓鼬:如何創建文檔並同時將子數組推入其中

[英]Mongoose: How to create a document and simultaneously push a sub array into it

我正在嘗試為用戶和用戶朋友播種mongo數據庫。

用戶是它自己的模型(帶有對Friends模型的引用)。

我有兩個數據數組可用於播種數據庫。 friends數組包含子數組。 每個子數組(按順序)包含相應用戶數組的好友。 即friends [0]是用戶[0]的朋友。

目標是創建用戶,然后搜索以確定用戶的朋友文檔是否已准備就緒。 如果沒有,請創建好友文檔,然后將其推送給該用戶。

該代碼創建用戶,但僅從friends [0]創建朋友。 它似乎與異步有關,但不知道下一步該怎么做。

   function doSomething(){
        var i = 0;
        userArray.forEach(function(user){
            User.create(user, function(err, createdUser){
                if(err){
                    console.log(err);
                }
                console.log(createdUser.name + ' created!');
                var incrementer = 0;
                for(let friend of friends[i]){
                    Friend.find({name: friend.name}, function(foundFriend){
                        if(foundFriend == undefined){
                            Friend.create(friend, function(err, createdFriend){
                                createdUser.friends.push(createdFriend);
                                createdUser.save;
                                console.log(createdFriend.name + ' added to' + createdUser.name + ' friends!');
                                incrementer++;
                                if(incrementer === friends[i].length){
                                        i++; 
                                    }                                        
                            });
                        }
                    });
                }
            });
        });
    }

    //Output I would expect (assuming no documents exist)

    //John Smith created!
    //Sally added to John Smith friends
    //Mike added to John Smith friends

    //Mary Doe created!
    //Bob added to Mary Doe friends!
    //Gary added to Mary Doe friends!

    //Instead I am getting (assuming no matching documents exist)

    //John Smith created!
    //Mary Doe created!


    //Sally added to John Smith friends!
    //Sally added to Mary Doe friends!
    //Mike added to Mary Doe friends!
    //Sally added to Mary Doe friends!

輸出的最后一部分是隨機的,並且隨每次運行而變化。

我會將您的循環分成兩個單獨的任務。 PS考慮不保存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(); }); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM