2016-03-25 4 views
0

У меня есть коллекция с документами, которые следует эту структуру:вложения полей во всех 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, поэтому прошу прощения, если мой синтаксис неверен. Все поля имеют отношения «один к одному» с дочерним элементом (то есть один ребенок имеет один идентификатор, одно имя, один возраст, одну школу и т. Д.), Поэтому мне также интересно, требуется ли внедрение.

ответ

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

Это нормально, чтобы внедрить их, вот для чего предназначен документ dB. Поэтому, если вам нужна миграция, вы в основном будете использовать функции mongodb, такие как update, с $ set и $ unset.

Подробнее здесь: https://docs.mongodb.org/manual/reference/method/db.collection.update/

+0

Это хорошо знать, но что синтаксис фактически встраивать поля? – SmashingGood

+0

Возможно, это был плохой ответ, но моя цель - не решать проблему, а помогать людям учиться и решать сами проблемы. Извините, если я сделал это неправильно. –

Смежные вопросы