在所有mongodb文档中嵌入字段

时间:2016-03-25 06:52:11

标签: mongodb

我有一个包含此结构的文档的集合:

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,一个名字,一个年龄,一个学校等),所以我也想知道嵌入是否是必要的。

2 个答案:

答案 0 :(得分:0)

请尝试使用$set设置新字段personalInfoeducationInfo,并#unset删除旧字段agename在此之前,最好通过$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/