mongodb - 使用 shell 从 Mongodb 中删除记录

标签 mongodb

我有一个包含学生数据的简单集合,我需要根据一些参数删除一些记录。我从 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)
}

理想情况下,它应该删除所有 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 }

是因为 JS/Mongo 的异步特性吗?解决相同问题的其他替代方法是什么?

最佳答案

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

否则,您会尝试根据光标属性删除文档,这不是您想要的。另见 http://docs.mongodb.org/manual/core/read-operations/#cursors .

关于mongodb - 使用 shell 从 Mongodb 中删除记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14670595/

相关文章:

MongoDB 数据建模 : any drawbacks in using lots of databases?

javascript - 使用集合过滤事件

node.js - 具有随机键但字符串类型的对象的 Mongoose 模式

mysql - Mongodb和Mysql数据类型对比

java - 用于枚举字段的 mongoDb 和 spring 数据自定义转换器

javascript - 如何更新 MongoDB 中的 boolean 值

MongoDB 数据删除 - 回收磁盘空间

javascript - mongoose - 对每个数组元素执行查询

node.js - 无法将数据从 React Js 发布到 Node js

node.js - DeprecationWarning : collection. findAndModify 已弃用。改用 findOneAndUpdate、findOneAndReplace 或 findOneAndDelete?