2011-12-20 70 views
2

我想將「開發人員」添加到以下的mongodb集合中並將其刪除。可以有許多項目,每個項目可以有許多用戶故事,每個用戶故事可以有多個開發人員在其上工作。如何在Node.js中添加和刪除嵌套的mongodb集合?

問:

我可以使用哪些MongoDB的查詢到新的開發者加入到「故事」集合,我可以用什麼MongoDB的查詢,從「故事」集合中刪除開發商?

JSON的項目:

{ 
    "_id": ObjectId("4ef0a2bac8c056bc26000002"), 
    "chat": { 
    "0": { 
     "body": "Test", 
     "sender": "brownj2", 
     "sent": 1324404459137 
    } 
    }, 
    "clients": { 
    "0": { 
     "username": "b" 
    } 
    }, 
    "owner": "brownj2", 
    "stories": { 
    "0": { 
     "_id": "U89Tq7X8BF2qaBfFzfE99lkb", 
     "deadline": "10\/10\/2010", 
     "description": "Example user story", 
     "developers": { 
     /* Developers go here */ 
     }, 
     "lane": "2", 
     "roi": "0.38", 
     "sp": "8", 
     "title": "Test #2", 
     "type": "story", 
     "value": "3" 
    }, 
    "1": { 
     "_id": "EdbzrnoZTh8LTFDNrUSBkVrd", 
     "deadline": "10\/10\/2010", 
     "description": ".....", 
     "developers": { 
     /* Developers go here */    
     }, 
     "lane": "0", 
     "roi": "1.00", 
     "sp": "4", 
     "title": "Test #1", 
     "type": "story", 
     "value": "4" 
    } 
    }, 
    "team": { 
    "0": { 
     "username": "a" 
    } 
    }, 
    "title": "Example Project" 
} 

回答

0

好吧這是一個解決方法,但它似乎工作得很好。我正在做一些服務器上的工作,而不是數據庫。

projects.findOne({_id : projectId}, function(err, project) 
    { 
    for(var i = 0; i < project.stories.length; i++) 
    { 
     if(project.stories[i]._id == storyId) 
     { 
     var developers = project.stories[i].developers; 
     var size = developers.length; 

     var developers[size] = {username : username}; 

      projects.update({"stories._id" : storyId}, 
        {$set: 
         { 
         "stories.$.developers" : developers 
         } 
        }, false, true); 
     } 
    } 
    } 
0

你有不一致的設計。你的一些集合是數組,其他的則是哈希。

我傾向於使用哈希更多,但然後我不使用普通的'數字'索引的項目。例如:

"stories": { 
    "0": { 
     "_id": "U89Tq7X8BF2qaBfFzfE99lkb", 
     "deadline": "10\/10\/2010", 

會更有意義(我),如果它被寫了

"stories": { 
    "U89Tq7X8BF2qaBfFzfE99lkb": { 
     "deadline": "10\/10\/2010", 

這同樣適用於開發商。我想他們有ID,對吧?所以它應該是

"developers": { 
    dev1_id : {username : username1}, 
    dev2_id : {username : username2} 
} 

現在你可以用簡單的管理這些對象點綴set小號

添加新的開發

db.projects.update({_id: ObjectId("4ef0a2bac8c056bc26000002")}, 
        {$set: {"stories.U89Tq7X8BF2qaBfFzfE99lkb.dev3_id" : username3}) 

拉開發商

db.projects.update({_id: ObjectId("4ef0a2bac8c056bc26000002")}, 
        {$unset: {"stories.U89Tq7X8BF2qaBfFzfE99lkb.dev1_id" : 1}) 
+0

由於某種原因,Rockmongo用方括號顯示空的散列。在使用大括號啓動的JavaScript中。我會修改數據庫,並試試這個,謝謝。 – Jack 2011-12-20 18:40:24

+0

這是因爲它是用PHP編寫的。和PHP不能分辨空數組和空散列(他們是那裏相同的東西,AFAIK) – 2011-12-20 18:45:07

+0

我看了一下,並沒有改變數據庫結構的可能性,因爲這意味着改變大量的查詢和功能。有沒有可行的答案,我的上述問題,而不改變數據庫結構? – Jack 2011-12-20 19:04:26