var SecuritySchema = new Mongoose.Schema({
_bids: [{
type: Mongoose.Schema.Types.ObjectId,
ref: 'BuyOrder'
}],
_asks: [{
type: Mongoose.Schema.Types.ObjectId,
ref: 'SellOrder'
}]
});
var OrdersSchema = new Mongoose.Schema({
_security: {
type: Mongoose.Schema.Types.ObjectId,
ref: 'Security'
},
price: {
type: Number,
required: true
},
quantity: {
type: Number,
required: true
}
});
// declare seat covers here too
var models = {
Security: Mongoose.model('Security', SecuritySchema),
BuyOrder: Mongoose.model('BuyOrder', OrdersSchema),
SellOrder: Mongoose.model('SellOrder', OrdersSchema)
};
return models;
比我保存一个新的BuyOrder
例如:
// I put the 'id' of the security: order.__security = security._id on the client-side
var order = new models.BuyOrder(req.body.order);
order.save(function(err) {
if (err) return console.log(err);
});
并尝试重新检索相关的安全性:
models.Security.findById(req.params.id).populate({
path: '_bids'
}).exec(function(err, security) {
// the '_bids' array is empty.
});
我认为这是某种命名问题,但我不确定,我已经看过示例here并且在使用Number
作为Id
类型的moongoose网站上:http://mongoosejs.com/docs/populate.html
答案 0 :(得分:0)
ref
字段应使用单数型号名称
另外,只需:
models.Security.findById(req.params.id).populate('_bids').exec(...
我现在主要怀疑你的代码片段是你的req.body.order
_security
字符串而不是包含字符串的数组。
此外,您不需要id
属性。 Mongodb本身会自动将_id
作为真正的BSON ObjectId,而mongoose会将id
添加为相同值的字符串表示,所以不要担心。
答案 1 :(得分:-1)
虽然我不理解你的架构(以及它的循环特性?),但这段代码可以工作:
var order = new models.BuyOrder({ price: 100, quantity: 5});
order.save(function(err, orderDoc) {
var security = new models.Security();
security._bids.push(orderDoc);
security.save(function(err, doc) {
models.Security.findById({ _id: doc._id })
.populate("_bids").exec(function(err, security) {
console.log(security);
});
});
});
有:
BuyOrder
save
s it Security
_bids
新orderDoc
的{{1}} 请注意,没有将文档添加到_bids数组的自动方法,所以我手动完成了。
结果:
_id