我想在以下mongodb集合中添加和删除“开发人员”。可以有很多项目,每个项目可以有很多用户故事,每个用户故事可以有多个开发人员在上面工作。
我可以使用哪些mongodb查询将新开发人员添加到“stories”集合中,以及我可以使用哪些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 :(得分:0)
您的设计不一致。你的一些集合是数组,其他是哈希。
我倾向于使用哈希更多,但是我不会对项目使用简单的“数字”索引。例如:
"stories": {
"0": {
"_id": "U89Tq7X8BF2qaBfFzfE99lkb",
"deadline": "10\/10\/2010",
如果它被写为,会更有意义(对我而言)
"stories": {
"U89Tq7X8BF2qaBfFzfE99lkb": {
"deadline": "10\/10\/2010",
开发人员也是如此。我想他们有身份证,对吧?所以它应该是
"developers": {
dev1_id : {username : username1},
dev2_id : {username : username2}
}
现在,您可以使用简单的set
s
添加新开发者
db.projects.update({_id: ObjectId("4ef0a2bac8c056bc26000002")},
{$set: {"stories.U89Tq7X8BF2qaBfFzfE99lkb.dev3_id" : username3})
拉开发商
db.projects.update({_id: ObjectId("4ef0a2bac8c056bc26000002")},
{$unset: {"stories.U89Tq7X8BF2qaBfFzfE99lkb.dev1_id" : 1})
答案 1 :(得分: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);
}
}
}