javascript - 在 meteor 中插入嵌套对象

标签 javascript mongodb meteor

我将此文档保存在名为 exam 的 mongo 集合中

// meteor:PRIMARY> db.exam.find()
{
    "_id" : "RLvWTcsrbRXJeTqdB",
    "examschoolid" : "5FF2JRddZdtTHuwkx",
    "examsubjects" : [
        {
            "subject" : "Z4eLrwGwqG4pw4HKX"
        },
        {
            "subject" : "fFcWby8ArpboizcT9"
        }
    ],
    "examay" : "NrsP4srFGfkc5cJkz",
    "examterm" : "5A5dNTgAkdRr5j53j",
    "examclass" : "gYF2wE4wBCRy9a3ZC",
    "examname" : "First",
    "examdate" : ISODate("2016-05-07T22:41:00Z"),
    "examresultsstatus" : "notreleased"
}

我正在尝试从此文档中选择数据并使用此代码将其保存到另一个文档中。目的是让上面文档中的 examsubjects 值成为我要插入的文档中的键进入。

'click .reactive-table tr': function() {
    Session.set('selectedPersonId', this._id);
    var cursor = Exam.find({ _id:
            Session.get("selectedPersonId")}).fetch();
    cursor.forEach(function(doc){
        for (i = 0; i < doc.examsubjects.length; i++) {
            for (var prop in doc.examsubjects[i]) {
                console.log("obj." + prop + " = " + doc.examsubjects[i][prop]);
                var subj = doc.examsubjects[i][prop];
                Told.insert({
                    examschoolid:"sms",
                    examname:doc.examname,
                    examsubjects: [{subj : "0"}],
                    examay:doc.examay,
                    examterm:doc.examterm,
                    examclass:doc.examclass,
                    examdate:doc.examdate
                });
            }
        }
    });
},

当代码运行时,保存 subjects 值的变量 subj 只是插入 subj 而不知道它是这样的变量

{
    "_id" : "5yjwFanBAupgu9GHq",
    "examschoolid" : "sms",
    "examname" : "First",
    "examsubjects" : [
        {
            "subj" : "0"
        }
    ],
    "examay" : "NrsP4srFGfkc5cJkz",
    "examterm" : "5A5dNTgAkdRr5j53j",
    "examclass" : "gYF2wE4wBCRy9a3ZC",
    "examdate" : ISODate("2016-05-07T22:41:00Z")
}

为什么变量不被视为变量?

编辑

'click .reactive-table tr': function() {
    Session.set('selectedPersonId', this._id);
    var cursor = Exam.find({ _id: Session.get("selectedPersonId")}).fetch();
    cursor.forEach(function(doc){

        var sq = function(){
            for (i = 0; i < doc.examsubjects.length; i++) {
                for (var prop in doc.examsubjects[i]) {
                    const subj = doc.examsubjects[i][prop];
                    let subject = {};
                    subject[subj] = "0";
                    return [subject];

                }
            }
        }
        console.log(sq());
        Told.insert({
            examschoolid:"sms",
            examname:doc.examname,
            examsubjects: sq(),
            examay:doc.examay,
            examterm:doc.examterm,
            examclass:doc.examclass,
            examdate:doc.examdate
        });

    });
    //Uncaught TypeError: cursor.count is not a function
},

更新后的代码几乎可以工作,但只插入了 1 条记录。

最佳答案

这就是 JSON 的工作原理,它从字面上获取键。使用 ES6 括号表示法修复它:

examsubjects: [{
  [subj] : "0"
}],

关于javascript - 在 meteor 中插入嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37137391/

相关文章:

javascript - jQuery event.stopPropagation() 是否停止该事件的所有回调,或者仅停止其声明的回调?

javascript - 全日历 v2 错误 : Uncaught TypeError: Cannot read property 'month' of undefined

java - Spring data,mongodb - 悲观锁定?

MongoDB 指南针社区 : Databases are visible but their collections are not showing up after authentication

node.js - 使用 MongoClient v3.0 时 db.collection 不是函数

javascript - 扩展 Object.prototype 打破了 JavaScript for..in 循环,它在 Google Maps API v3 中被大量使用

javascript - meteor 的工作流程和工具

javascript - 如何动态更新chrome应用程序的版本号?

javascript - 在 flickr 上将 CSS 选择器与 beautifulsoup 一起使用时遇到困难,我做错了什么吗?

MongoDB Aggregation 添加下一个文档(一个 Meteor App)