我有一个包含此结构的文档的集合:
child:
{
id: int
name: string
age: int
dob: date
school: string
class: string
}
我想将某些字段嵌入到这样的字体中:
child:
{
id : int
personalInfo {
name: string
age: int
dob: date
}
educationInfo {
school: string
class: string
}
}
如何在代码中执行此操作?我是Mongodb的新手,所以如果我的语法不正确,我会道歉。所有字段都与孩子有一对一的关系(即一个孩子有一个id,一个名字,一个年龄,一个学校等),所以我也想知道嵌入是否是必要的。
答案 0 :(得分:0)
请尝试使用$set
设置新字段personalInfo
和educationInfo
,并#unset
删除旧字段age
,name
在此之前,最好通过$exists
检查所有这些字段,下面是示例代码,
> var personfields = [ "name", "age", "dob" ];
> var educationFields = [ "school", "class" ];
> var query = {};
> personFields.forEach(function(k){ query[k] = {$exists: 1}});
> educationFields.forEach(function(k){ query[k] = {$exists: 1}});
> db.collection.find(query).forEach(function(doc){
var personalInfo = {};
var educationInfo = {};
for (var k in doc) {
if (personFields.indexOf(k) !== -1){
personalInfo[k] = doc[k];
} else if (educationFields.indexOf(k) !== -1) {
educationInfo[k] = doc[k];
}
}
db.collection.update({_id: doc._id},
{$set: {
personalInfo: personalInfo,
educationInfo: educationInfo},
$unset: {'name': '',
'age': '',
'dob': '',
'school': '',
'class': ''}});
})
答案 1 :(得分:-1)
嵌入它们是可以的,这就是dB的文档。因此,如果您需要迁移,您基本上会使用mongodb的功能,例如更新,$ set和$ unset。
在此处查看更多内容:https://docs.mongodb.org/manual/reference/method/db.collection.update/