Node.js - 用Mongoose创建关系

时间:2011-10-18 16:54:11

标签: javascript mongodb node.js mongoose

我有2个架构,CustphoneSubdomainCustphone belongs_to SubdomainSubdomain has_many Custphones

问题在于使用Mongoose创建关系。我的目标是:custphone.subdomain并获取Custphone所属的子域。

我的模式中有这个:

SubdomainSchema = new Schema
    name : String

CustphoneSchema = new Schema
    phone : String
    subdomain  : [SubdomainSchema]

当我打印Custphone结果时,我得到了这个:

{ _id: 4e9bc59b01c642bf4a00002d,
  subdomain: [] }

Custphone结果在MongoDB中有{"$oid": "4e9b532b01c642bf4a000003"}时。

我想custphone.subdomain并获取通话电话的子域对象。

2 个答案:

答案 0 :(得分:121)

听起来您正在尝试在Mongoose中尝试新的populate功能。

使用上面的示例:

var Schema = mongoose.Schema,
    ObjectId = Schema.ObjectId;

SubdomainSchema = new Schema
    name : String

CustphoneSchema = new Schema
    phone : String
    subdomain  : { type: ObjectId, ref: 'SubdomainSchema' }

subdomain字段将使用'_id'更新,例如:

var newSubdomain = new SubdomainSchema({name: 'Example Domain'})
newSubdomain.save()

var newCustphone = new CustphoneSchema({phone: '123-456-7890', subdomain: newSubdomain._id})
newCustphone.save()

要从subdomain字段实际获取数据,您必须使用稍微复杂的查询语法:

CustphoneSchema.findOne({}).populate('subdomain').exec(function(err, custPhone) { 
// Your callback code where you can access subdomain directly through custPhone.subdomain.name 
})

答案 1 :(得分:-1)

我有类似的问题,必须使用mongoose Model.findByIdAndUpdate()

docs:http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate

这篇文章也帮助了我:http://blog.ocliw.com/2012/11/25/mongoose-add-to-an-existing-array/comment-page-1/#comment-17812