【问题标题】:Embedding fields in all mongodb documents在所有 mongodb 文档中嵌入字段
【发布时间】:2016-03-25 15:53:25
【问题描述】:

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

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

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    请尝试使用$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': ''}});
       })
    

    【讨论】:

      【解决方案2】:

      可以嵌入它们,这就是文档 dB 的用途。因此,如果您需要迁移,您基本上会使用 mongodb 的函数,如 update ,以及 $set 和 $unset。

      在此处查看更多信息:https://docs.mongodb.org/manual/reference/method/db.collection.update/

      【讨论】:

      • 很高兴知道,但实际嵌入字段的语法是什么?
      • 也许这是一个糟糕的答案,但我的目标不是解决问题,而是帮助人们学习,以及如何自己解决问题。对不起,如果我做错了。
      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 2022-06-27
      • 1970-01-01
      • 2021-02-20
      • 2022-12-04
      • 2014-01-06
      • 2020-09-18
      • 1970-01-01
      相关资源
      最近更新 更多