Node.js - 使用 Mongoose 创建关系
Posted
技术标签:
【中文标题】Node.js - 使用 Mongoose 创建关系【英文标题】:Node.js - Creating Relationships with Mongoose 【发布时间】:2011-12-10 06:52:37 【问题描述】:我有 2 个架构,Custphone
和 Subdomain
。 Custphone
belongs_to
Subdomain
和Subdomain
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
并获取custphone的子域对象。
【问题讨论】:
@Mike Robinson - 我想做 custphone.subdomain 并获取 custphone 的子域对象。 【参考方案1】:听起来您正在寻找在 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
)
【讨论】:
这对最新版本的猫鼬仍然有效吗? 谢谢。这有助于我使用mongoose#3.8.3
进行一些配置。
也许它已经改变了,但运行似乎不存在。我必须使用 .exec!
我在 Mongoose 4.4.12 中使用了它,它仍然有效。这适用于我,Mongoose documentation 中的代码示例不适用,尽管我是 Mongoose 的新手。【参考方案2】:
我遇到了类似的问题,不得不使用猫鼬的 Model.findByIdAndUpdate()
文档: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
【讨论】:
以上是关于Node.js - 使用 Mongoose 创建关系的主要内容,如果未能解决你的问题,请参考以下文章
创建 Schema Mongoose (Node.js) 模型以简化代码
无法使用 Node.js Express MongoDB Mongoose CoffeeScript 发布