在流星中插入嵌套对象
Inserting a nested object in 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
});
}
}
});
},
当代码运行时,保持主题值的变量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"
}],
这是因为它被视为文本对象中的键。
如果你想把subj
的值作为你的键,你需要使用括号符号,预先创建对象:
const subj = doc.examsubjects[i][prop];
let subject = {};
subject[subj] = "0";
Told.insert({
examschoolid:"sms",
examname:doc.examname,
examsubjects: [subject],
...
});
相关文章:
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- 如何打印嵌套对象的所有值
- 设置嵌套对象属性的更好方法
- 嵌套对象结构
- 如何递归地获取嵌套对象中所有子对象的列表
- 更改嵌套对象的父子相关id
- 如何通过json对象数组为嵌套对象赋值
- Ember.js(2.5.0)如何设置嵌套对象值
- 嵌套对象文本访问父级
- 如何对两个嵌套对象进行排序
- 在javascript中使用方括号表示法的嵌套对象
- 具有嵌套对象数组的 Javascript 对象的递归搜索函数
- 更新嵌套对象的多个字段
- MongoDB嵌套对象数组后查询
- 在流星中插入嵌套对象
- 将嵌套对象数据添加到窗体中
- Chai深度包含了对嵌套对象的断言
- 使用Angular.js解析JSON中的嵌套对象数组
- 如何以编程方式添加到可变嵌套对象中
- Javascript嵌套对象访问根级别