java – 无法从MongoDB中的文档数组中删除最低分数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 无法从MongoDB中的文档数组中删除最低分数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1508字,纯文字阅读大概需要3分钟。
内容图文
![java – 无法从MongoDB中的文档数组中删除最低分数](/upload/InfoBanner/zyjiaocheng/894/947030e3cb3349b59cd7f39c580782af.jpg)
这是我的收藏品的样子:
db.students.find({_id:100}).pretty()
{
"_id" : 100,
"name" : "Demarcus Audette",
"scores" : [
{
"type" : "exam",
"score" : 30.61740640636871
},
{
"type" : "quiz",
"score" : 14.23233821353732
},
{
"type" : "homework",
"score" : 31.41421298576332
},
{
"type" : "homework",
"score" : 30.09304792394713
}
]
}
我在Mongo shell上执行以下2个查询:
x=db.students.aggregate( [{ "$unwind":"$scores" },{"$match":{"scores.type":"homework"}},{ "$group":{"_id":"$_id","minscore":{"$min":"$scores.score" }}} ] )
而下一个是:
for (var a in x["a"]) { db.students.update( { "_id":a["_id"] },{"$pull":{"scores":{"score":a["minscore"]}}} ) }
我能够看到最低分数列表,但是当我执行第二个查询时,似乎没有删除任何内容.我知道有一个逻辑错误.我试着阅读这里的帖子,但我无法通过它.我只是想知道我哪里出错了.
解决方法:
你的for循环中有几个问题 – 虽然你的聚合看起来很好.
结果文档“x”包含数组字段“result”.您想迭代该数组中的文档.您拥有的for循环语法不会在数组中设置值,而是在数组中设置索引.更好更清楚的是使用forEach循环语法:
x.result.forEach(function(doc) {
db.students.update( { "_id": doc._id },
{ "$pull": { "scores" : {
"score":doc.minscore,
"type":"homework"
} } }
);
});
你的更新声明也不太准确 – 你想确保你只拿最低分的作业 – 如果同一个学生的单一考试成绩与他们最低的作业相同怎么办?您的语法将拉出所有分数等于minscore的子文档!
那个很容易修复(我向你展示了你需要用来提取家庭作业子文档的语法),但要记住$pull will pull all values与查询匹配,如果只有一个作业,那么它就是minscore,它会被拉出来.如果有两个家庭作业,但他们是平等的,他们都会被拉!需要考虑的事情.
内容总结
以上是互联网集市为您收集整理的java – 无法从MongoDB中的文档数组中删除最低分数全部内容,希望文章能够帮你解决java – 无法从MongoDB中的文档数组中删除最低分数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。