2016-06-06 84 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

相關問題