2016-12-20 6 views
1

У меня есть 2 коллекции под названием «Пользователь и местоположение». В User есть местоположение _id, и это Object. Id также ссылается на коллекцию местоположений. Мой вопрос в том, что я сделал не так? Когда я вызываю функцию getUser, я хочу видеть информацию о пользователе и информацию о местоположении пользователя. Что мне нужно сделать ?Mongo db, как дать объект _id документ другой коллекции

Схема пользователя

module.exports = (function userSchema() { 
    var Mongoose = require('mongoose'); 

    var userSchema = Mongoose.Schema({ 
     name: { 
      type: String, 
      require: true 
     }, 
     surname: { 
      type: String, 
      require: true 
     }, 
     tel: { 
      type: String, 
      require: true 
     }, 
     age: { 
      type: String, 
      require: true 
     }, 
     mevki_id: { 
      type: String, 
      require: true 
     }, 
     location_id: [{ 
      type: Mongoose.Schema.Types.ObjectId, 
      ref: 'locations' 
     }] 
    }); 

    var collectionName = 'users'; 

    var User = Mongoose.model(collectionName, userSchema); 

    return User; 
})(); 

пользователя контроллера

function userController() { 
    var User = require('../models/UserSchema'); 

    this.createUser = function (req, res, next) { 
     var name = req.body.name; 
     var surname = req.body.surname; 
     var tel = req.body.tel; 
     var age = req.body.age; 
     var mevki_id = req.body.mevki_id; 
     var lok_id = req.body.lok_id; 

     User.create({ 
      name: name, 
      surname: surname, 
      tel: tel, 
      age: age, 
      mevki_id: mevki_id, 
      lok_id: lok_id 
     }, function (err, result) { 
      if (err) { 
       console.log(err); 
       return res.send({ 
        'error': err 
       }); 
      } else { 
       return res.send({ 
        'result': result, 
        'status': 'successfully saved' 
       }); 
      } 
     }); 
    }; 

    this.getUser = function (req, res, next) { 
     User.find() 
      .populate('lok_id') 
      .exec(function (err, result) { 
       if (err) { 
        console.log(err); 
        return res.send({ 
         'error': err 
        }); 
       } else { 
        return res.send({ 
         'USERS': result 
        }); 
       } 
      }); 
    }; 
    return this; 
}; 

module.exports = new UserController(); 

ответ

0

Во-первых, ваш schema неправильно:

var userSchema = new Mongoose.Schema({ 
    // ... 
    location_id: { type: [Mongoose.Schema.Types.ObjectId], ref: 'locations' } 
}) 

Во-вторых, в вашем schema й e последнее имя поля - location_id, а в вашем контроллере вы меняете его на lok_id.

Таким образом, исправить это:

User.create({ 
    // ... 
    location_id: lok_id 
} 

и это:

User 
    .find() 
    .populate('location_id') 

UPDATE В вашем json имя последнего поля является location_id, поэтому исправить это тоже:

this.createUser = function (req, res, next) { 
    // ... 
    var lok_id = req.body.location_id; 
} 
+0

Я действительно THKK для ваша помощь, но он не работает, я не могу создать пользователя. Есть ли какая-нибудь фотография моего json-файла: – MAD

+0

Можете ли вы проверить мой обновленный ответ? И если он все еще не работает, можете ли вы любезно показать результат 'console.log (req.body)'? – willie17

+0

{ "имя": "Акиф", "фамилия": "Демирезен", "тел": "6056056", "возраст": "35", "mevki_id": "2", «LOCATION_ID ": { "иль":" Стамбул», "ILCE": "Beylikduzu" } } \t Я отправляю файл JSON, как описано выше, но результат таков: { "результат": { "__v": 0, "_id": "5859f736cc66d64394141b2e", "location_id" : [] }, «status»: «успешно сохранен» } – MAD