如何添加和删除Node.js中嵌套的MongoDB集合?

我想添加和删除“开发人员”到以下的mongodb集合。 可以有很多项目,每个项目可以有许多用户故事,每个用户故事可以有多个开发人员在工作。

题:

我可以用什么mongodb查询将新开发人员添加到“stories”集合中,以及可以使用什么mongodb查询从“stories”集合中删除开发人员?

项目的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" } 

你有不一致的devise。 你的一些集合是数组,其他的则是哈希。

我倾向于使用哈希更多,但是我不使用简单的'数字'索引的项目。 例如:

 "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来pipe理这些对象

添加新的开发者

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

拉开发者

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

好吧,这是一个解决方法,但它似乎工作得很好。 我正在做一些在服务器上的工作,而不是数据库。

  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); } } }