2015-04-29 75 views
0

我试图用mongoose和nodejs创建一个webapp。这是我第一次使用猫鼬和nodejs,所以我不会放弃它。Mongoose在填充时返回空数组

我一个人的模型:

var PERSON = new mongoose.Schema({ 
    name: {type: String, required: true}, 
    zipcode: {type: String, required: true}, 
    city: {type: String, required: true}, 
    street: {type: String, required: true}, 
    address: {type: Number, required: true}, 
    email: {type: String, required: true}, 
    type: {type: String, enum: ['lid', 'passant'], required: true}, 
    ships: { 
     type: [{ 
     name: {type: String, required: true}, 
     length: {type: Number, required: true}, 
     type: {type: String, required: true}, 
     picture: {type: Buffer, required: false} 
     }], 
     required: false 
    }, 
    user: { 
     type: { 
     userName: {type: String, required: true}, 
     password: {type: String, required: true}, 
     passwordKey: {type: String, required: true}, 
     roles: {type: [{type: mongoose.Schema.Types.ObjectId, ref: 'role'}], required: true} 
     }, 
     required: false 
    } 
    }, 
    { 
    collection: 'PERSON' 
    }); 

而且ROL型号:

var ROLE = new mongoose.Schema({ 
    name: {type: String, required: true} 
    }, 
    { 
    collection: 'ROLE' 
    }); 

当我试图运行对人模型查找查询,我想填充用户.roles数组。但结果它仍然是空的。

/GET a specific person by id or type/ 
    server.get('/api/person/:id', function (req, res, next) { 
    if (helper.isValidObjectID(req.params.id)) { 
     person.findById(req.params.id).populate("user.roles").exec(function (err, result) { 
      if (err) { 
      res.status(404).json(err); 
      } else { 
      res.status(200).json(result); 
      } 
     } 
    ); 
    } else { 
     next(); 
    } 
    }, function (req, res, next) { 
person.find({type: req.params.id}).populate('user.roles').exec(function (err, result) { 
    if (err) { 
    res.status(404).json(err); 
    } else { 
    res.status(200).json(result); 
    } 
}); 

});

,结果我得到:

{ 
    "_id":"553f79d4f1481c0c14b42d59", 
    "name":"Wilco Boogert", 
    "zipcode":"4305RH", 
    "city":"Ouwerkerk", 
    "street":"baalpapenweg", 
    "address":2, 
    "email":"[email protected]", 
    "type":"lid", 
    "user":{ 
     "userName":"wboogert", 
     "password":"sha1$168fd599$1$502b965cb083ebdfcafb17e655455ef63779e1a1", 
     "passwordkey":"kfjvlksdfm", 
     "roles":[ 

     ] 
    }, 
    "__v":0, 
    "ships":[ 
     { 
     "name":"titanic", 
     "length":269, 
     "type":"Olympic-klasse", 
     "_id":"553f79d4f1481c0c14b42d5a" 
     } 
    ] 
} 

在数据库中的原单的对象是:

{ 
    "_id": { 
     "$oid": "553f79d4f1481c0c14b42d59" 
    }, 
    "name": "Wilco Boogert", 
    "zipcode": "4305RH", 
    "city": "Ouwerkerk", 
    "street": "baalpapenweg", 
    "address": 2, 
    "email": "[email protected]", 
    "type": "lid", 
    "user": { 
     "roles": [ 
      { 
      "$oid": "5522996f0fff331ed03cae6c" 
      } 
     ], 
     "passwordkey": "kfjvlksdfm", 
     "password": "sha1$168fd599$1$502b965cb083ebdfcafb17e655455ef63779e1a1", 
     "userName": "wboogert" 
    }, 
    "ships": [ 
     { 
      "name": "titanic", 
      "length": 269, 
      "type": "Olympic-klasse", 
      "picture": "<Binary Data>", 
      "_id": { 
       "$oid": "553f79d4f1481c0c14b42d5a" 
      } 
     } 
    ], 
    "__v": 0 
} 

所以你看到一个角色是空的。我在网上搜索,但我找不到问题所在。安永能帮助我吗?

回答

0

,就应该替换该行:

roles: {type: [{type: mongoose.Schema.Types.ObjectId, ref: 'role'}], required: true} 

这一个:

roles: {type: [{type: mongoose.Schema.Types.ObjectId, ref: 'ROLE'}], required: true} 

事实上,引用必须是因为它的定义完全相同的名称:

collection: 'ROLE' 

区分大小写。

+0

首先感谢您的快速回复,我改变了您挑选的内容。但是,当我改变它的结果保持不变,换句话说返回数组仍然是空的 – Bjorn