2015-11-06 59 views
2

什麼,我想建立:MongoDB中並非如此簡單找到

我在蒙戈有這樣的東西:

{ 
    team1: 'Love', 
    team2: 'Popa', 
    score: 3 
} 
{ 
    team1: 'Love' 
    team2: 'Ola' 
    score: 1 
} 
{ 
    team1: 'Popa' 
    team2: 'Ola' 
    score: 5 
} 
{ 
    team1: 'Popa' 
    team2: 'Kola' 
    score: 56 
} 

而且我有form2 inputs

<input type="text" id="team1" placeholder="Team 1"> 
<input type="text" id="team2" placeholder="Team 2"> 

洙爲例如我把第一個輸入隊Love和第二隊Popa

而且我希望顯示與雙方球隊在mongo的球隊的比賽比賽,例如這個將球隊Ola

如果您瞭解我想構建的內容,請幫我創建Posts.find(.... 謝謝!

UPDATE:那是我的主意如何做到這一點 1.

Posts.find({team1: 'Love'}).map(function(item){ return item.team2; }); 
    Posts.find({team2: 'Love'}).map(function(item){ return item.team1; }); 
// disaply all team that plays with first team that I put in first input 
    Posts.find({team1: 'Popa'}).map(function(item){ return item.team2; }); 
    Posts.find({team2: 'Popa'}).map(function(item){ return item.team1; }); 
// disaply all team that plays with first team that I put in first input 
// out put will be look like [Popa,Ola] - first team , [Popa,Ola,Kola] - second team 
  • 創建字陣列,其由在兩個arrrays。 [Popa,Ola]
  • 刪除'Popa'因爲Popa不能Popa玩笑,就好像TEAM1對TEAM1 [Ola]
  • 我需要顯示的分數與這兩支球隊,像
  • 奧拉與愛情(1),奧拉VS波帕(5)id(在蒙戈)的這個遊戲

    UPDATE2 2015年11月7日的解決方案是不存在,請幫忙!

    +1

    你有試過什麼嗎? – inspired

    +0

    當然,我現在更新我的帖子,給我一分鐘 – Qwe

    +1

    我擔心你的想法是最健全的一個,這個問題是,你正在尋找兩個不同的行有相同的主題,這是非常困難的任何數據庫。但是,您可以輕鬆將其分解爲兩個查詢,而不是4個,將team1和team2查詢結合起來。另一種方法是映射你爲一個查詢找到的一組團隊,並使用它作爲限制第二個查詢的方法,這樣你可以從字面上提取一個或兩個記錄 – Sammaye

    回答

    0

    我假定你的集合名稱爲Posts

    db.Posts.find({team1:"Love"}).forEach(function(doc){ 
        printjson(db.Posts.findOne({team1:"Popa", team2:doc["team2"]})); 
    }) 
    
    +0

    它沒有工作,我不知道爲什麼,重新運行'undefind' – Qwe

    0
    db.Posts.ensureIndex({team1:1,team2:1}); 
    
    var teams = []; 
    
    db.Posts.find(
        {$or:[{team1:'Love'},{team2:'Love'}]}, 
        {team1:1,team2:1,_id:0} 
    ).forEach(function(doc){ 
        if(doc.team1 === 'Love'){ 
         teams[teams.length] = doc.team2; 
        }else{ 
         teams[teams.length] = doc.team1; 
        } 
    }); 
    
    var actualTeams = []; 
    
    db.Posts.find(
        {$or:[ 
         {team1:'Popa', team2:{$in:teams}}, 
         {team2:'Popa', team1:{$in:teams}} 
        ]}, 
        {_id:0,team1:1,team2:1} 
    ).forEach(function(doc){ 
        if(doc.team1 === 'Popa'){ 
         actualTeams[actualTeams.length] = doc.team2; 
        }else{ 
         actualTeams[actualTeams.length] = doc.team1; 
        } 
    }); 
    

    類似的東西和actualTeams將包含交叉引用和你這樣做只有兩種查詢數據庫。

    +0

    'Posts.ensureIndex'在mongo 3.0,'Posts..createIndex'中不起作用 - 給我錯誤,沒有這部分代碼我沒有正確結果 – Qwe

    +0

    @Qwe很好,沒有測試就完成了。它顯示了正確的道路。 ensureindex的功能是https://docs.mongodb.org/v3。0/reference/method/db.collection.ensureIndex/ – Sammaye

    +0

    @Qwe我確實發現了一個小錯誤,也許這是錯的? – Sammaye