我在Python中使用pandas数据帧,目前我的数据框是:
product_id mock_test_id q_id q_correct_option language_id is_corr is_p is_m
2790 2999 1 1 1 1 1 1
2790 2999 2 1 1 1 1 1
2790 2999 3 2 1 0 1 1
2790 2999 4 3 1 2 1 1
2790 2999 5 3 1 3 1 1
,收集文件如下:
{ "_id" : ObjectId("57eea81cd65b43a872024522"),
"langid" : 1,
"mocktest_id" : 2999,
"pid" : 2970,
"userid" : 1223,
"attempt" : {
"1" : { "seqid" : 1,
"o" : NumberLong(1),
"t" : NumberLong(749825),
"is_m" : 1,
"is_p" : 1,
"is_corr" : 0 },
"2" : { "seqid" : 2,
"o" : NumberLong(2),
"t" : NumberLong(749825),
"is_m" : 1,
"is_p" : 1,
"is_corr" : 1 }
}
}
现在我想一次更新这个文档,其中,在尝试之内'对象我们有q_id作为其中的键。从上面可以看出,q_id也存在于数据帧中。现在,对应于每个mock_test_id,product_id,q_id我想一次更新is_p,is_m,is_corr字段,其中is_p或is_corr字段可能存在也可能不存在。
现在,我正在迭代数据帧并逐行更新:
for index,row in stud_mock_result_df:
db.UserAttemptData.update({'userid':user_id,'mocktest_id':mock_test_id,'pid':pid},{'$set':{'attempt.'+str(row['q_id'])+'.is_m':0,'attempt.'+str(row['q_id'])+'.is_p':1,'attempt.'+str(row['q_id'])+'.is_corr':row['is_corr']}})
如何一次更新?
答案 0 :(得分:1)
使用一个查询,您可以为数组的多个对象设置相同的值,但要为不同的对象设置不同的值,您必须点击多个查询。
如果您想更新具有相同值的多个对象,则在这种情况下使用 {multi:true} 选项。
db.UserAttemptData.update(condition, update, {multi: true}).