我被困在填充我的阵列......这是我从Terminal.find()
函数得到的:
{ _id: 5a7300046f18140d5081be83,
type: 5a71a22b0d4a2d0ec3b91edc,
serial: '213',
macAddress: 'E1:12:BE:82:12',
barcode: '1243w464563',
dateArrival: 2018-02-01T11:54:15.870Z,
firmware: 5a71a2030d4a2d0ec3b91edb,
installedAt: 5a61e547922c6d28e324d775,
installedAtBranch: 5a7054713fe20c0c5a94fb11,
__v: 0,
deleted: false,
activated: true }
所以我希望在用户搜索终端时获得正确的信息。这就是为什么我必须使用populate()
。我现在很困难的是在阵列内部填充更深的东西。所以第一个对象type
有一个readMethod
,一个layout
和interfaces
- 我必须填充这三个,但我不知道如何。 interfaces
是我的数据库中的一个对象,这使事情更加严重。所以我的type
看起来像这样:
我认为如果有人可以告诉我如何填充type
所有interfaces
我可以自己完成其余的事情。
提前致谢!
我通过在谷歌内部深入搜索找到了答案:
Terminal.findOne({'barcode': barcode})
.populate({
path: 'type',
populate: [{
path: 'user',
model: 'User'
},
{
path: 'method',
model: 'Method',
},
{
path: 'layout',
model: 'Layout'
},
{
path: 'interfaces',
model: 'Interface'
}]
})
.populate('firmware')
.populate('customerId')
.populate('branchId')
.exec( function (err, terminal) {
if (err) {
res.status(500).send(err);
}
res.json({ terminal });
});
答案 0 :(得分:1)
当您使用猫鼬时,我认为您的模型应该如下所示,或者它必须如下所示
终端类型架构
var terminalTypeSchema = new Schema({
articlenumber: { type: Number, default: something },
readMethod: Schema.ObjectId,
layout: Schema.ObjectId,
interfaces: [{ type: Schema.ObjectId, ref: 'User' }]
});
mongoose.model('TerminalType', terminalTypeSchema);
接口架构
var interfaceSchema = new Schema({
// some vars
});
mongoose.model('Interface', interfaceSchema);
现在运行以下查询
TerminalType.findOne({ _id: terminalTypeId})
.populate('interfaces') // <==
.exec(function(err, terminalTypes){
// You can achieve the rest on your own.
});