2016-06-06 42 views
0
{ "_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(######) 请写出删除后代替###### 解决我的数据库应该如下如何在mongodb 3.2中删除一个具有相同名称的字段?

{ "_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 } 

回答

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. 过滤器基于基础上,score递增,然后作用于 第一值后排序student_idtype
  2. 对文档进行排序,这是一个具有最低分数
  3. 所有文件删除文件与最低得分功课

我不是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) 
+1

thnak你这么多:) :)! – Berry

相关问题