【问题标题】:MongoDB using parameter for nested locationMongoDB使用参数进行嵌套位置
【发布时间】:2018-10-17 10:58:47
【问题描述】:

虽然我找不到类似问题的解决方案,但有一点新手问题,这对我有用。 这是我的收藏:

{
   "_id": ObjectId("5bc712851224ceec702d9bdf"),
   "index": "123456",
   "name": "Jan",
   "surname": "Nowak",
   "grades": {
     "IABD": [
       2,
       3.5,
       4 
    ],
     "NPAD": [
       4,
       4,
       5 
    ] 
  } 
}

现在我需要为特定(函数参数)课程提高成绩。

所以我尝试在几个层面上解决它,我希望有人能按照以下方式引导我完成它: 首先,我想成功不将课程作为参数传递:

function add_grade(index="123456", course="IABD", grade=5.5) 
{
db.students.update( {"index" : index }, { $push: { "grades" : { "IABD" : grade } } } );
}

什么也没发生(成绩未添加到成绩列表中) 我想看到一些结果,所以我想看看 $set 是否会起作用并且确实有效!

function add_grade(index="123456", course="IABD", grade=5.5) 
{
db.students.update( {"index" : index }, { $set: { "grades" : { "IABD" : grade } } } );
}

但它扔掉了我的整个成绩对象(如预期的那样)。至少我知道我在正确的轨道上。 问题 1:为什么 $push 没有按我预期的方式工作

问题2:set/push中如何使用course参数? 只是为了澄清Q2,我并不懒惰,我尝试了很多方法,但都没有奏效,请帮助!

【问题讨论】:

    标签: javascript mongodb parameters nested location


    【解决方案1】:

    您可以尝试以下查询。将6 推入IABD

    db.getCollection('students').update( { "index": "123456" }, { $push: { "grades.IABD" :  6 } });
    

    【讨论】:

    • 它什么也没做。没有错误或任何东西,但集合保持不变。但是,如果我将您的查询更改为 $set,那么它可以工作(但它已设置,当我需要推送时)!尽管如此,我仍然不知道如何使用课程参数进行推送/设置
    【解决方案2】:

    $push 未按您预期的方式工作,因为数组字段位于嵌入式文档中,并且推送您需要使用 dot notation 即代替

    { "$push": { "grades" : { "IABD" : grade } } }
    

    您需要将字段指定为dot notation

    { "$push": { "grades.IABD" : grade } } 
    

    要在 push 中使用 course 参数,您需要创建一个包含点符号的更新对象

    { "grades.<course>" : grade }
    

    例如

    var course = "IABD";
    var grade = 5.5;
    var update = {};
    update["grades." + course] = grade;
    printjson(update) // prints { "grades.IABD" : 5.5 }
    

    所以你的函数看起来像

    function add_grade(index="123456", course="IABD", grade=5.5) {
        var update = {};
        update["grades." + course] = grade;
        db.students.update( 
            { "index" : index }, 
            { "$push": update } 
        );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-15
      • 2021-02-26
      • 2012-05-24
      • 2020-04-14
      • 1970-01-01
      • 2020-02-06
      相关资源
      最近更新 更多