【发布时间】:2017-07-01 20:01:45
【问题描述】:
我正在尝试使用点符号和 $ 运算符更新 MongoDB 中的多级嵌入式文档。下面,我有一个由一个文档组成的集合:
{
"_id" : ObjectId("55da48520549875d8480707c"),
"queried" : [],
"field" : "materials science",
"subfields" : [
{
"subfield_name" : "electronic materials",
"queried" : [],
"subfields_2" : [
{
"subfield_2_name" : "electronics",
"queried" : [],
"keywords" : [
{
"queried" : [],
"name" : "silicon"
},
{
"queried" : [],
"name" : "graphene"
},
{
"queried" : [],
"name" : "carbon nanotube"
},
{
"queried" : [],
"name" : "black phosphorus"
},
{
"queried" : [],
"name" : "phophorene"
},
{
"queried" : [],
"name" : "molybdenum disulphide"
}
],
},
{
"subfield_2_name" : "dielectrics",
"queried" : [],
"keywords" : [
{
"queried" : [],
"name" : "silicon oxide"
},
{
"queried" : [],
"name" : "aluminum oxide"
},
{
"queried" : [],
"name" : "hafnium dioxide"
},
{
"queried" : [],
"name" : "hexagonal boron nitride"
},
{
"queried" : [],
"name" : "Zirconium dioxide"
}
],
},
],
}
]
}
我想通过以下方式更新此收藏:
1) 查询文档以匹配关键字数组(在第 3 级嵌入文档中)中的 "name" 键与值 "carbon nanotube"
2) 然后我想将时间戳 (time()) 附加到具有键值对 "name":"carbon nanotube" 的同一嵌入文档中的 "queried":[] 键数组中
{
"_id" : ObjectId("55da48520549875d8480707c"),
"queried" : [],
"field" : "materials science",
"subfields" : [
{
"subfield_name" : "electronic materials",
"queried" : [],
"subfields_2" : [
{
"subfield_2_name" : "electronics",
"queried" : [],
"keywords" : [
{
"queried" : [],
"name" : "silicon"
},
{
"queried" : [],
"name" : "graphene"
},
{
"queried" : [1359147763.02],
"name" : "carbon nanotube"
},
{
"queried" : [],
"name" : "black phosphorus"
},
{
"queried" : [],
"name" : "phophorene"
},
{
"queried" : [],
"name" : "molybdenum disulphide"
}
],
},
{
"subfield_2_name" : "dielectrics",
"queried" : [],
"keywords" : [
{
"queried" : [],
"name" : "silicon oxide"
},
{
"queried" : [],
"name" : "aluminum oxide"
},
{
"queried" : [],
"name" : "hafnium dioxide"
},
{
"queried" : [],
"name" : "hexagonal boron nitride"
},
{
"queried" : [],
"name" : "Zirconium dioxide"
}
],
},
],
}
]
}
我知道这一切都可以在 update() 命令中完成:
topics.collection.update({"subfields.subfields_2.keywords.name":"carbon nanotube"}, {$push: {"subfields.subfields_2.keywords.$.queried":time()}})
但我认为我的点符号存在错误,因为我收到错误SyntaxError: invalid syntax。我是否需要更改架构才能执行此 update() 或者是否有其他方法来更新此嵌入文档
【问题讨论】:
标签: mongodb schema embedded-documents database nosql