我有一个填充了学生数据的简单集合,我需要根据一些参数删除一些记录.我从mongoshell执行了以下操作
for(i=0;i<200;i++) {
var rec = db.grades.find({student_id:i,type:'homework'}).sort({score:1}).limit(1)
db.grades.remove(rec)
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,它应该删除所有student_ids类型的家庭作业的最低分.显然,只有find参数中的最后2条记录(student_id:199)被清除,其余记录仍然存在.
db.grades.find({student_id:10,type:'homework'}).sort({score:1}).limit(1)
{ "_id" : ObjectId("50906d7fa3c412bb040eb5a1"), "student_id" : 10, "type" : "homework", "score" : 6.094174990746648 }
Run Code Online (Sandbox Code Playgroud)
是因为JS/Mongo的aysnchorous性质?解决这个问题的其他选择是什么?
rec是不是一个文件,它是一个数据库游标.您需要从中实际获取文档:
for(i=0;i<200;i++) {
var cur = db.grades.find({student_id:i,type:'homework'}).sort({score:1}).limit(1);
var actualDoc = cur.next();
db.grades.remove(actualDoc);
}
Run Code Online (Sandbox Code Playgroud)
否则,您正在尝试根据光标属性删除文档,这不是您想要的.另见http://docs.mongodb.org/manual/core/read-operations/#cursors.
| 归档时间: |
|
| 查看次数: |
5967 次 |
| 最近记录: |