如何在mongodb 3.2中删除一个具有相同名称的字段?

时间:2016-06-06 18:56:39

标签: python json mongodb

{ "_id" : { "$oid" : "50906d7fa3c412bb040eb57b" }, "student_id" : 1, "type" : "exam", "score" : 74.20010837299897 }
{ "_id" : { "$oid" : "50906d7fa3c412bb040eb57c" }, "student_id" : 1, "type" : "quiz", "score" : 96.76851542258362 }
{ "_id" : { "$oid" : "50906d7fa3c412bb040eb57d" }, "student_id" : 1, "type" : "homework", "score" : 21.33260810416115 }
{ "_id" : { "$oid" : "50906d7fa3c412bb040eb57e" }, "student_id" : 1, "type" : "homework", "score" : 44.31667452616328 }

上面给出的是json格式的数据库。我想删除低分的字段(作业)。 db.grades(######) 请写下解决方案代替###### 删除后,我的数据库应该看起来像下面给出的数据

{ "_id" : { "$oid" : "50906d7fa3c412bb040eb57b" }, "student_id" : 1, "type" : "exam", "score" : 74.20010837299897 }
{ "_id" : { "$oid" : "50906d7fa3c412bb040eb57c" }, "student_id" : 1, "type" : "quiz", "score" : 96.76851542258362 }
{ "_id" : { "$oid" : "50906d7fa3c412bb040eb57e" }, "student_id" : 1, "type" : "homework", "score" : 44.31667452616328 }

1 个答案:

答案 0 :(得分:3)

使用findAndModify

db.students.findAndModify({
     query: {"student_id" : 1, "type" : "homework"},
     sort: {"score": 1},
     remove: true
})

在MongoDB 3.2中,您还可以使用findOneAndDelete

db.students.findOneAndDelete(
     {"student_id" : 1, "type" : "homework"},
     {sort: {"score": 1}}
)

这些查询将:

  1. 根据student_idtype
  2. 过滤所有文档
  3. 根据score递增对文档进行排序,然后对其执行操作 排序后的第一个值,即得分最低的值
  4. 使用最少的作业成绩删除文档
  5. 我不是PyMongo的专家,但您可以使用find_one_and_delete方法在python中实现相同的目标:

    filter_by_student_and_type = {'student_id' : 1, 'type' : 'homework'}
    sort_by_score = [('score', pymongo.ASCENDING )]
    db.students.find_one_and_delete(filter_by_student_and_type, sort=sort_by_score)