mongodb脚本用于删除两个集合中的文档
问题描述:
如何编写一个嵌套查询涉及两个集合。mongodb脚本用于删除两个集合中的文档
例如我有学生和作业集合。
Student:
{
"_id":"556",
"name":"sam",
"assignment":[{"2","3"}]
}
Assignment:
{
"_id":"2",
"name":"math"
}
{
"_id":"3",
"name":"english"
}
我如何可以编写一个脚本,当学生ID = 556删除,相关转让文件也得到删除
这是集合的样子JSON格式,
{
"_id" : "123",
"media" : [
"33",
"44"
],
"sectionId" : "dd",
"courseId" : "string",
"startDate" : "string",
"endDate" : "string",
"title" : "string"
}
所以我想要获得媒体ID并在$中使用它
答
在删除学生之前,请在列表中获取赋值id,然后将该数组用作删除文档的查询s在作业集合中。东西 像下面的操作:
// Get assignmentIds = ["2", "3"]
var assignmentIds = db.student.findOne({"_id": "556"}).assignment;
// Delete student
db.student.remove({"_id": "556"});
// Delete associated assignments
db.assignment.remove({ "_id": { "$in": assignmentIds } });
假如你有一个返回多个文档,并且需要使用find()
,而不是findOne()
则需要由find()
返回iterate the cursor查询标准函数,将每个文档的代理id加载到一个数组中,然后在删除操作中使用它。
使用上述相同的例子,则可以使用forEach(
)光标方法来迭代光标,串联使用原生JavaScript的Array.concat()
方法assignement ids数组。考虑下面的例子:
// Get assignment ids
var assignmentIds = [];
db.student.find({"firstName": "Jane"}).forEach(function (doc){
assignmentIds = assignmentIds.concat(doc.assignment);
});
// print the array
printjson(assignmentIds);
// Delete students
db.student.remove({"firstName": "Jane"});
// Delete associated assignments
db.assignment.remove({ "_id": { "$in": assignmentIds } });
@Harshana这甚至不是一个有效的BSON文档。你可以编辑你的问题来包含用'db.student.findOne({“_ id”:“556”})查询返回的实际文档,因为'{“2”,“3”}'甚至不是有效的目的。 – chridam