如何添加和删除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); } } }
- Node.js readdircallback调用两次
- Node Js + MySql + Express – app.use(bodyParser()); 没有定义 – 错误build立连接到新的SQL方法
- AWS Lambda函数返回“无法find模块索引”,但configuration中的处理程序设置为索引
- Node.js的exec事件不会在Promise内部触发
- 如何从两个不同的文件使用socket.io发送消息?
- 如何找出函数中的模块path
- 通过Node.js传递从承诺到承诺的价值
- 使用Multer上传文件,并在parsing并上传到数据库之前将其暂时存储在内存中
- 从mongodb通过nodejs获取数据并将其转换为html页面