猫鼬填充命名和结构

时间:2016-10-24 20:45:30

标签: node.js mongodb mongoose populate

我有这个“用户”模型,我存储了朋友,这个朋友有一些选择

// Prepare schema
var schema = new db.Schema({
    friends: [{
        active : Boolean,
        user : { type: db.Schema.ObjectId, ref: 'user' },
        options : [{ type: db.Schema.ObjectId, ref: 'friend_option' }],
    }],
    image: { type: db.Schema.ObjectId, ref: 'file' },
    password: { 
        type: String, 
        select: false
    },
    email: String,
    name: String,
    udid: [{
        device: String,
        udid: String
    }],
    created_on: Date
});

这里我和他的朋友一起得到一个用户

var friendQuery = User.find( {_id:req.params.id});
friendQuery.select('friends');
friendQuery.populate({ path: 'friends._id', model: 'user', select:'_id name' });        
friendQuery.exec(
    function(err, user) {
    if (err)
        res.send(err);
        res.send(user);
});

我的问题是,为什么结果与我的模型有不同的名字?为什么朋友 - > _id-> _id代替朋友 - > user-> _id?

friends": [
      {
        "_id": {
          "_id": "58025664c154929d3207b232",
          "name": "User 1"
        },
        "options": [
        ],
        "active": false
      },
      {
        "_id": {
          "_id": "580257e1e3cd4fc7326fa97b",
          "name": "User 2"
        },
        "options": [
        ],
        "active": false
      }
    ]

另一种选择,这个解决方案适用于假想的大应用程序?

1 个答案:

答案 0 :(得分:0)

您使用此方法的方式不正确,只需在查询中进行简单更改

 var friendQuery = User.find( {_id:req.params.id});
friendQuery.select('friends');
friendQuery.populate({ path: 'friends.user', model: 'user', select:'_id name' });        
friendQuery.exec(
    function(err, user) {
    if (err)
        res.send(err);
        res.send(user);
});

当您在朋友阵列中引用您的用户时,只需将_id从查询替换为肯定适合您的用户